initial
This commit is contained in:
+59
@@ -0,0 +1,59 @@
|
||||
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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user