github.com/kunlun-qilian/sqlx/v3@v3.0.0/generator/sql_func_generator.go (about) 1 package generator 2 3 import ( 4 "go/types" 5 "path" 6 "path/filepath" 7 8 "github.com/go-courier/codegen" 9 "github.com/go-courier/packagesx" 10 ) 11 12 func NewSqlFuncGenerator(pkg *packagesx.Package) *SqlFuncGenerator { 13 return &SqlFuncGenerator{ 14 pkg: pkg, 15 } 16 } 17 18 type SqlFuncGenerator struct { 19 Config 20 pkg *packagesx.Package 21 model *Model 22 } 23 24 type Config struct { 25 StructName string 26 TableName string 27 Database string 28 29 WithComments bool 30 WithTableName bool 31 WithTableInterfaces bool 32 WithMethods bool 33 34 FieldPrimaryKey string 35 FieldKeyDeletedAt string 36 FieldKeyCreatedAt string 37 FieldKeyUpdatedAt string 38 } 39 40 func (g *Config) SetDefaults() { 41 if g.FieldKeyDeletedAt == "" { 42 g.FieldKeyDeletedAt = "DeletedAt" 43 } 44 45 if g.FieldKeyCreatedAt == "" { 46 g.FieldKeyCreatedAt = "CreatedAt" 47 } 48 49 if g.FieldKeyUpdatedAt == "" { 50 g.FieldKeyUpdatedAt = "UpdatedAt" 51 } 52 53 if g.TableName == "" { 54 g.TableName = toDefaultTableName(g.StructName) 55 } 56 } 57 58 func (g *SqlFuncGenerator) Scan() { 59 for ident, obj := range g.pkg.TypesInfo.Defs { 60 if typeName, ok := obj.(*types.TypeName); ok { 61 if typeName.Name() == g.StructName { 62 if _, ok := typeName.Type().Underlying().(*types.Struct); ok { 63 g.model = NewModel(g.pkg, typeName, g.pkg.CommentsOf(ident), &g.Config) 64 } 65 } 66 } 67 } 68 } 69 70 func (g *SqlFuncGenerator) Output(cwd string) { 71 if g.model == nil { 72 return 73 } 74 75 dir, _ := filepath.Rel(cwd, filepath.Dir(g.pkg.GoFiles[0])) 76 filename := codegen.GeneratedFileSuffix(path.Join(dir, codegen.LowerSnakeCase(g.StructName)+".go")) 77 78 file := codegen.NewFile(g.pkg.Name, filename) 79 g.model.WriteTo(file) 80 _, _ = file.WriteFile() 81 }