linstrom/cmd/model-gen/main.go
mStar 69927c76ff
Some checks failed
/ test (push) Has been cancelled
More fixes, this time for cmd stuff
2025-03-29 17:51:56 +01:00

90 lines
2.5 KiB
Go

package main
import (
"context"
"flag"
"time"
"git.mstar.dev/mstar/goutils/other"
"github.com/rs/zerolog/log"
"github.com/testcontainers/testcontainers-go"
postgresContainer "github.com/testcontainers/testcontainers-go/modules/postgres"
"github.com/testcontainers/testcontainers-go/wait"
"gorm.io/driver/postgres"
"gorm.io/gen"
"gorm.io/gorm"
"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")
}