You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

migrate.go 1.4 kB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package cmdline
  2. import (
  3. "fmt"
  4. "os"
  5. "github.com/spf13/cobra"
  6. "gitlink.org.cn/cloudream/jcs-pub/client/internal/config"
  7. clitypes "gitlink.org.cn/cloudream/jcs-pub/client/types"
  8. "gorm.io/driver/mysql"
  9. "gorm.io/gorm"
  10. )
  11. func init() {
  12. var configPath string
  13. cmd := cobra.Command{
  14. Use: "migrate",
  15. Short: "Run database migrations",
  16. Run: func(cmd *cobra.Command, args []string) {
  17. migrate(configPath)
  18. },
  19. }
  20. cmd.Flags().StringVarP(&configPath, "config", "c", "", "Path to config file")
  21. RootCmd.AddCommand(&cmd)
  22. }
  23. func migrate(configPath string) {
  24. err := config.Init(configPath)
  25. if err != nil {
  26. fmt.Println(err)
  27. os.Exit(1)
  28. }
  29. db, err := gorm.Open(mysql.Open(config.Cfg().DB.MakeSourceString()))
  30. if err != nil {
  31. fmt.Println(err)
  32. os.Exit(1)
  33. }
  34. db = db.Set("gorm:table_options", "CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci")
  35. migrateOne(db, clitypes.Bucket{})
  36. migrateOne(db, clitypes.ObjectAccessStat{})
  37. migrateOne(db, clitypes.ObjectBlock{})
  38. migrateOne(db, clitypes.Object{})
  39. migrateOne(db, clitypes.PackageAccessStat{})
  40. migrateOne(db, clitypes.Package{})
  41. migrateOne(db, clitypes.PinnedObject{})
  42. migrateOne(db, clitypes.UserSpace{})
  43. fmt.Println("migrate success")
  44. }
  45. func migrateOne[T any](db *gorm.DB, model T) {
  46. err := db.AutoMigrate(model)
  47. if err != nil {
  48. fmt.Printf("migratting model %T: %v\n", model, err)
  49. os.Exit(1)
  50. }
  51. }

本项目旨在将云际存储公共基础设施化,使个人及企业可低门槛使用高效的云际存储服务(安装开箱即用云际存储客户端即可,无需关注其他组件的部署),同时支持用户灵活便捷定制云际存储的功能细节。