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 [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) } }