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.3 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package cmd
  2. import (
  3. "fmt"
  4. "os"
  5. "github.com/spf13/cobra"
  6. "gitlink.org.cn/cloudream/jcs-pub/coordinator/internal/config"
  7. cortypes "gitlink.org.cn/cloudream/jcs-pub/coordinator/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, cortypes.HubConnectivity{})
  36. migrateOne(db, cortypes.Hub{})
  37. migrateOne(db, cortypes.HubLocation{})
  38. migrateOne(db, cortypes.User{})
  39. migrateOne(db, cortypes.UserAccessToken{})
  40. migrateOne(db, cortypes.LoadedAccessToken{})
  41. fmt.Println("migrate success")
  42. }
  43. func migrateOne[T any](db *gorm.DB, model T) {
  44. err := db.AutoMigrate(model)
  45. if err != nil {
  46. fmt.Printf("migratting model %T: %v\n", model, err)
  47. os.Exit(1)
  48. }
  49. }

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