linstrom/cmd/model-gen/main.go

55 lines
1.5 KiB
Go

/*
model-gen generates the gorm-gen interface for interacting
with the database. It does not perform migrations on the database.
*/
package main
import (
"flag"
"git.mstar.dev/mstar/goutils/other"
"github.com/rs/zerolog/log"
"gorm.io/driver/postgres"
"gorm.io/gen"
"gorm.io/gorm"
"git.mstar.dev/mstar/linstrom/config"
"git.mstar.dev/mstar/linstrom/shared"
"git.mstar.dev/mstar/linstrom/storage-new/models"
)
func main() {
other.SetupFlags()
flag.Parse()
other.ConfigureLogging(nil)
config.ReadAndWriteToGlobal(*shared.FlagConfigFile)
db, err := gorm.Open(
postgres.Open(config.GlobalConfig.Storage.BuildPostgresDSN()),
&gorm.Config{
PrepareStmt: false,
Logger: shared.NewGormLogger(log.Logger),
},
)
if err != nil {
log.Fatal().Err(err).Msg("Failed to open connection to temporary container")
}
log.Info().Msg("Connected to db")
g := gen.NewGenerator(gen.Config{
OutPath: "./dbgen",
Mode: gen.WithoutContext | gen.WithDefaultQuery | gen.WithQueryInterface, // generate mode
})
g.UseDB(db)
log.Info().Msg("Applying basic operations on all datatypes")
g.ApplyBasic(models.AllTypes...)
log.Info().Msg("Basic operations applied, applying extra features")
g.ApplyInterface(func(models.INotification) {}, models.Notification{})
g.ApplyInterface(func(models.IUser) {}, models.User{})
g.ApplyInterface(func(models.IAccessToken) {}, models.AccessToken{})
log.Info().Msg("Extra features applied, starting generation")
g.Execute()
log.Info().Msg("Code generation complete")
}