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

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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. // TODO 将create_database.sql的内容逐渐移动到这里来
  25. err := config.Init(configPath)
  26. if err != nil {
  27. fmt.Println(err)
  28. os.Exit(1)
  29. }
  30. db, err := gorm.Open(mysql.Open(config.Cfg().DB.MakeSourceString()))
  31. if err != nil {
  32. fmt.Println(err)
  33. os.Exit(1)
  34. }
  35. db = db.Set("gorm:table_options", "CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci")
  36. migrateOne(db, clitypes.Bucket{})
  37. migrateOne(db, clitypes.ObjectAccessStat{})
  38. migrateOne(db, clitypes.ObjectBlock{})
  39. migrateOne(db, clitypes.Object{})
  40. migrateOne(db, clitypes.PackageAccessStat{})
  41. migrateOne(db, clitypes.Package{})
  42. migrateOne(db, clitypes.PinnedObject{})
  43. migrateOne(db, clitypes.UserSpace{})
  44. fmt.Println("migrate success")
  45. }
  46. func migrateOne[T any](db *gorm.DB, model T) {
  47. err := db.AutoMigrate(model)
  48. if err != nil {
  49. fmt.Printf("migratting model %T: %v\n", model, err)
  50. os.Exit(1)
  51. }
  52. }

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