- Implemented player_configs table to store multiple player configurations per user. - Migrated existing player settings from user_preferences to player_configs. - Removed player-related columns from user_preferences. - Added referral state fields to user for tracking referral rewards. - Created migration scripts for database changes and data migration. - Added test cases for app services and usage helpers. - Introduced video job service interfaces and implementations.
85 lines
1.9 KiB
Go
85 lines
1.9 KiB
Go
package main
|
|
|
|
import (
|
|
"log"
|
|
|
|
"gorm.io/datatypes"
|
|
"gorm.io/driver/postgres"
|
|
"gorm.io/gen"
|
|
"gorm.io/gen/field"
|
|
"gorm.io/gorm"
|
|
"stream.api/internal/config"
|
|
)
|
|
|
|
func main() {
|
|
cfg, err := config.LoadConfig()
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
dsn := cfg.Database.DSN
|
|
if dsn == "" {
|
|
log.Fatal("APP_DATABASE_DSN is required")
|
|
}
|
|
|
|
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
|
|
if err != nil {
|
|
log.Fatal("Không thể kết nối database:", err)
|
|
}
|
|
|
|
g := gen.NewGenerator(gen.Config{
|
|
OutPath: "internal/database/query",
|
|
ModelPkgPath: "internal/database/model",
|
|
Mode: gen.WithDefaultQuery | gen.WithQueryInterface,
|
|
|
|
FieldNullable: true,
|
|
FieldCoverable: true,
|
|
FieldSignable: true,
|
|
FieldWithIndexTag: true,
|
|
FieldWithTypeTag: true,
|
|
})
|
|
|
|
g.UseDB(db)
|
|
|
|
dataMap := map[string]func(gorm.ColumnType) string{
|
|
"decimal": func(columnType gorm.ColumnType) string {
|
|
return "float64"
|
|
},
|
|
"numeric": func(columnType gorm.ColumnType) string {
|
|
return "float64"
|
|
},
|
|
"text[]": func(columnType gorm.ColumnType) string {
|
|
return "pq.StringArray"
|
|
},
|
|
"_text": func(columnType gorm.ColumnType) string {
|
|
return "pq.StringArray"
|
|
},
|
|
"json": func(columnType gorm.ColumnType) string {
|
|
return "datatypes.JSON"
|
|
},
|
|
"jsonb": func(columnType gorm.ColumnType) string {
|
|
return "datatypes.JSON"
|
|
},
|
|
}
|
|
|
|
g.WithDataTypeMap(dataMap)
|
|
g.WithImportPkgPath("github.com/lib/pq", "gorm.io/datatypes")
|
|
|
|
g.WithOpts(
|
|
gen.FieldType("id", "string"),
|
|
gen.FieldType("features", "pq.StringArray"),
|
|
gen.FieldGenType("features", "Field"),
|
|
gen.FieldGORMTag("version", func(tag field.GormTag) field.GormTag {
|
|
return tag.Set("version", "")
|
|
}),
|
|
gen.FieldJSONTag("password", "-"),
|
|
gen.FieldJSONTag("version", "-"),
|
|
)
|
|
|
|
allTables := g.GenerateAllTable()
|
|
g.ApplyBasic(allTables...)
|
|
g.Execute()
|
|
|
|
_ = datatypes.JSON{} // tránh import bị báo unused trong vài trường hợp
|
|
}
|