/* 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" ) // "git.mstar.dev/mstar/linstrom/config" // "context" // "time" // postgresContainer "github.com/testcontainers/testcontainers-go/modules/postgres" // "github.com/testcontainers/testcontainers-go" // "github.com/testcontainers/testcontainers-go/wait" const ( dbName = "linstrom" dbUser = "linstrom" dbPass = "linstrom" ) func main() { other.SetupFlags() flag.Parse() other.ConfigureLogging(nil) config.ReadAndWriteToGlobal(*shared.FlagConfigFile) // Set up a temporary postgres container for gorm-gen to do its thing // log.Info().Msg("Starting temporary postgres container") // pgContainer, err := postgresContainer.Run( // context.Background(), // "postgres:16.4-alpine", // postgresContainer.WithDatabase(dbName), // postgresContainer.WithUsername(dbUser), // postgresContainer.WithPassword(dbPass), // testcontainers.WithWaitStrategyAndDeadline( // time.Minute, // wait.ForLog("database system is ready to accept connections"). // WithOccurrence(2). // WithStartupTimeout(time.Second*5), // ), // ) // if err != nil { // log.Fatal().Err(err).Msg("Failed to setup temporary postgres container") // } // log.Info().Msg("Temporary postgres container started") // defer func() { // if err := testcontainers.TerminateContainer(pgContainer); err != nil { // log.Fatal().Err(err).Msg("Failed to terminate temporary postgres container") // } // log.Info().Msg("Temporary postgres container stopped") // }() db, err := gorm.Open( postgres.Open(config.GlobalConfig.Storage.BuildPostgresDSN()), // postgres.Open(pgContainer.MustConnectionString(context.Background())), &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("Starting generation") g.Execute() log.Info().Msg("Code generation complete") }