60 lines
1.4 KiB
Go
60 lines
1.4 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"flag"
|
|
"fmt"
|
|
"log/slog"
|
|
"os"
|
|
"time"
|
|
|
|
"git.ma-al.com/goc_marek/gormcol"
|
|
)
|
|
|
|
func main() {
|
|
dsn := flag.String("dsn", "", "database DSN (required, e.g. user:pass@tcp(host:3306)/dbname)")
|
|
filter := flag.String("filter", "(ps_|b2b_).*", "regex to match table names")
|
|
outDir := flag.String("out", "./app/model/prestadb", "output directory for generated files")
|
|
pkgName := flag.String("pkg", "prestadb", "Go package name for generated files")
|
|
flag.Usage = func() {
|
|
fmt.Fprintf(os.Stderr, "gormcol-gen - generate GORM models with column descriptors\n\n")
|
|
fmt.Fprintf(os.Stderr, "Usage:\n")
|
|
fmt.Fprintf(os.Stderr, " gormcol-gen --dsn <connection-string> [options]\n\n")
|
|
fmt.Fprintf(os.Stderr, "Flags:\n")
|
|
flag.PrintDefaults()
|
|
}
|
|
|
|
if len(os.Args) < 2 {
|
|
flag.Usage()
|
|
os.Exit(0)
|
|
}
|
|
|
|
flag.Parse()
|
|
|
|
if *dsn == "" {
|
|
fmt.Fprintln(os.Stderr, "error: --dsn is required")
|
|
flag.Usage()
|
|
os.Exit(1)
|
|
}
|
|
|
|
db, err := gormcol.ConnectDSN(*dsn)
|
|
if err != nil {
|
|
slog.Error("failed to connect to database", "error", err)
|
|
os.Exit(1)
|
|
}
|
|
|
|
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Minute)
|
|
defer cancel()
|
|
|
|
cfg := gormcol.GenConfig{
|
|
OutputDir: *outDir,
|
|
PkgName: *pkgName,
|
|
TableFilter: *filter,
|
|
}
|
|
|
|
if err := gormcol.NewWithConfig(db, cfg).GenModels(ctx); err != nil {
|
|
slog.Error("failed to generate models", "error", err)
|
|
os.Exit(1)
|
|
}
|
|
}
|