migrations.go 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. package migrations
  2. import "time"
  3. func AddMigrations(mg *Migrator) {
  4. addMigrationLogMigrations(mg)
  5. addUserMigrations(mg)
  6. addAccountMigrations(mg)
  7. addDashboardMigration(mg)
  8. }
  9. func addMigrationLogMigrations(mg *Migrator) {
  10. mg.AddMigration("create migration_log table", new(AddTableMigration).
  11. Name("migration_log").WithColumns(
  12. &Column{Name: "id", Type: DB_BigInt, IsPrimaryKey: true, IsAutoIncrement: true},
  13. &Column{Name: "migration_id", Type: DB_NVarchar, Length: 255},
  14. &Column{Name: "sql", Type: DB_Text},
  15. &Column{Name: "success", Type: DB_Bool},
  16. &Column{Name: "error", Type: DB_Text},
  17. &Column{Name: "timestamp", Type: DB_DateTime},
  18. ))
  19. }
  20. func addUserMigrations(mg *Migrator) {
  21. mg.AddMigration("create user table", new(AddTableMigration).
  22. Name("user").WithColumns(
  23. &Column{Name: "id", Type: DB_BigInt, IsPrimaryKey: true, IsAutoIncrement: true},
  24. &Column{Name: "login", Type: DB_NVarchar, Length: 255, Nullable: false},
  25. &Column{Name: "email", Type: DB_NVarchar, Length: 255, Nullable: false},
  26. &Column{Name: "name", Type: DB_NVarchar, Length: 255, Nullable: true},
  27. &Column{Name: "password", Type: DB_NVarchar, Length: 50, Nullable: true},
  28. &Column{Name: "salt", Type: DB_NVarchar, Length: 50, Nullable: true},
  29. &Column{Name: "company", Type: DB_NVarchar, Length: 255, Nullable: true},
  30. &Column{Name: "account_id", Type: DB_BigInt, Nullable: false},
  31. &Column{Name: "is_admin", Type: DB_Bool, Nullable: false},
  32. &Column{Name: "created", Type: DB_DateTime, Nullable: false},
  33. &Column{Name: "updated", Type: DB_DateTime, Nullable: false},
  34. ))
  35. //------- user table indexes ------------------
  36. mg.AddMigration("add unique index UIX_user.login", new(AddIndexMigration).
  37. Name("UIX_user_login").Table("user").Columns("login"))
  38. mg.AddMigration("add unique index UIX_user.email", new(AddIndexMigration).
  39. Name("UIX_user_email").Table("user").Columns("email"))
  40. }
  41. func addAccountMigrations(mg *Migrator) {
  42. mg.AddMigration("create account table", new(AddTableMigration).
  43. Name("account").WithColumns(
  44. &Column{Name: "id", Type: DB_BigInt, IsPrimaryKey: true, IsAutoIncrement: true},
  45. &Column{Name: "name", Type: DB_NVarchar, Length: 255, Nullable: false},
  46. &Column{Name: "created", Type: DB_DateTime, Nullable: false},
  47. &Column{Name: "updated", Type: DB_DateTime, Nullable: false},
  48. ))
  49. mg.AddMigration("add unique index UIX_account.name", new(AddIndexMigration).
  50. Name("UIX_account_name").Table("account").Columns("name"))
  51. //------- account_user table -------------------
  52. mg.AddMigration("create account_user table", new(AddTableMigration).
  53. Name("account_user").WithColumns(
  54. &Column{Name: "id", Type: DB_BigInt, IsPrimaryKey: true, IsAutoIncrement: true},
  55. &Column{Name: "account_id", Type: DB_BigInt},
  56. &Column{Name: "user_id", Type: DB_BigInt},
  57. &Column{Name: "role", Type: DB_NVarchar, Length: 20},
  58. &Column{Name: "created", Type: DB_DateTime},
  59. &Column{Name: "updated", Type: DB_DateTime},
  60. ))
  61. mg.AddMigration("add unique index UIX_account_user", new(AddIndexMigration).
  62. Name("UIX_account_user").Table("account_user").Columns("account_id", "user_id"))
  63. }
  64. type Dashboard struct {
  65. Id int64
  66. Slug string `xorm:"index(IX_AccountIdSlug)"`
  67. AccountId int64 `xorm:"index(IX_AccountIdSlug)"`
  68. Created time.Time
  69. Updated time.Time
  70. Title string
  71. Data map[string]interface{}
  72. }
  73. func addDashboardMigration(mg *Migrator) {
  74. mg.AddMigration("create dashboard table", new(AddTableMigration).
  75. Name("dashboard").WithColumns(
  76. &Column{Name: "id", Type: DB_BigInt, IsPrimaryKey: true, IsAutoIncrement: true},
  77. &Column{Name: "slug", Type: DB_NVarchar, Length: 255, Nullable: false},
  78. &Column{Name: "title", Type: DB_NVarchar, Length: 255, Nullable: false},
  79. &Column{Name: "data", Type: DB_Text, Nullable: false},
  80. &Column{Name: "account_id", Type: DB_BigInt, Nullable: false},
  81. &Column{Name: "created", Type: DB_DateTime, Nullable: false},
  82. &Column{Name: "updated", Type: DB_DateTime, Nullable: false},
  83. ))
  84. //------- indexes ------------------
  85. mg.AddMigration("add unique index UIX_dashboard.account_id", new(AddIndexMigration).
  86. Name("UIX_dashboard_account_id").Table("dashboard").Columns("account_id"))
  87. mg.AddMigration("add unique index UIX_dashboard_account_id_slug", new(AddIndexMigration).
  88. Name("UIX_dashboard_account_id_slug").Table("dashboard").Columns("account_id", "slug"))
  89. }