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

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package cmd
  2. import (
  3. "fmt"
  4. "os"
  5. "github.com/spf13/cobra"
  6. cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
  7. stgmod "gitlink.org.cn/cloudream/storage/common/models"
  8. "gitlink.org.cn/cloudream/storage/common/pkgs/db2/model"
  9. "gitlink.org.cn/cloudream/storage/coordinator/internal/config"
  10. "gorm.io/driver/mysql"
  11. "gorm.io/gorm"
  12. )
  13. func init() {
  14. var configPath string
  15. cmd := cobra.Command{
  16. Use: "migrate",
  17. Short: "Run database migrations",
  18. Run: func(cmd *cobra.Command, args []string) {
  19. migrate(configPath)
  20. },
  21. }
  22. cmd.Flags().StringVarP(&configPath, "config", "c", "", "Path to config file")
  23. RootCmd.AddCommand(&cmd)
  24. }
  25. func migrate(configPath string) {
  26. // TODO 将create_database.sql的内容逐渐移动到这里来
  27. err := config.Init(configPath)
  28. if err != nil {
  29. fmt.Println(err)
  30. os.Exit(1)
  31. }
  32. db, err := gorm.Open(mysql.Open(config.Cfg().DB.MakeSourceString()))
  33. if err != nil {
  34. fmt.Println(err)
  35. os.Exit(1)
  36. }
  37. db = db.Set("gorm:table_options", "CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci")
  38. migrateOne(db, cdssdk.Bucket{})
  39. migrateOne(db, model.Cache{})
  40. migrateOne(db, model.Location{})
  41. migrateOne(db, model.HubConnectivity{})
  42. migrateOne(db, cdssdk.Hub{})
  43. migrateOne(db, stgmod.ObjectAccessStat{})
  44. migrateOne(db, stgmod.ObjectBlock{})
  45. migrateOne(db, cdssdk.Object{})
  46. migrateOne(db, stgmod.PackageAccessStat{})
  47. migrateOne(db, cdssdk.Package{})
  48. migrateOne(db, cdssdk.PinnedObject{})
  49. migrateOne(db, cdssdk.Storage{})
  50. migrateOne(db, model.UserStorage{})
  51. migrateOne(db, model.UserBucket{})
  52. migrateOne(db, cdssdk.User{})
  53. migrateOne(db, model.UserHub{})
  54. fmt.Println("migrate success")
  55. }
  56. func migrateOne[T any](db *gorm.DB, model T) {
  57. err := db.AutoMigrate(model)
  58. if err != nil {
  59. fmt.Printf("migratting model %T: %v\n", model, err)
  60. os.Exit(1)
  61. }
  62. }

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