gen_service.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. package services
  2. import (
  3. "flag"
  4. "fmt"
  5. "github.com/pkg/errors"
  6. "gorm.io/driver/mysql"
  7. "gorm.io/gen"
  8. "gorm.io/gorm"
  9. "gorm.io/gorm/logger"
  10. "strings"
  11. )
  12. type GenService struct {
  13. dbInstance *gorm.DB
  14. }
  15. func (s *GenService) Init() error {
  16. if !flag.Parsed() {
  17. flag.Parse()
  18. }
  19. if dbConfigInstance.IsZero() {
  20. }
  21. return nil
  22. }
  23. func (s *GenService) Start() error {
  24. if s.dbInstance == nil {
  25. return errors.New("try start gen service with nil database instance")
  26. }
  27. g := gen.NewGenerator(gen.Config{
  28. OutPath: "po",
  29. OutFile: "po",
  30. ModelPkgPath: "po",
  31. WithUnitTest: false,
  32. FieldNullable: true,
  33. FieldCoverable: true,
  34. FieldSignable: true,
  35. FieldWithIndexTag: true,
  36. FieldWithTypeTag: true,
  37. Mode: gen.WithDefaultQuery | gen.WithQueryInterface,
  38. })
  39. g.WithDataTypeMap(map[string]func(columnType gorm.ColumnType) (dataType string){
  40. "tinyint": func(filedType gorm.ColumnType) string {
  41. if ct, ok := filedType.ColumnType(); ok {
  42. if strings.HasPrefix(strings.ToLower(ct), "tinyint(1)") {
  43. return "int8"
  44. }
  45. return "int16"
  46. } else {
  47. return "int32"
  48. }
  49. },
  50. })
  51. g.UseDB(s.dbInstance)
  52. g.GenerateAllTable()
  53. g.Execute()
  54. return nil
  55. }
  56. func (s *GenService) Stop() {
  57. // do nothing
  58. }
  59. func (s *GenService) GetName() string {
  60. return "GenService"
  61. }
  62. func (s *GenService) GetInitOrder() int {
  63. return 0
  64. }
  65. func (s *GenService) initDatabase(dbCfg *DbConfig) error {
  66. if dbCfg == nil {
  67. return errors.New("can not init database with nil db config")
  68. }
  69. if err := dbCfg.FixDefaultValues(); err != nil {
  70. return errors.Wrap(err, "try fix default values of database config fail")
  71. }
  72. dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local",
  73. dbCfg.User,
  74. dbCfg.Pwd,
  75. dbCfg.Host,
  76. dbCfg.Port,
  77. dbCfg.Schema)
  78. if db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
  79. Logger: logger.Default.LogMode(logger.Info),
  80. }); err != nil {
  81. return errors.Wrapf(err, "try open database with dsn '%s' fail", dsn)
  82. } else {
  83. s.dbInstance = db
  84. }
  85. return nil
  86. }