db.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. package models
  2. import (
  3. "fmt"
  4. "gorm.io/gorm/schema"
  5. "speechAnalysis/conf"
  6. "speechAnalysis/extend/util"
  7. "speechAnalysis/pkg/logx"
  8. "speechAnalysis/pkg/mysqlx"
  9. "speechAnalysis/pkg/snowflake"
  10. "gorm.io/gorm"
  11. )
  12. type BaseModelInt struct {
  13. ID uint `gorm:"comment:主键ID;primaryKey;" json:"id"`
  14. CreatedAt util.JSONTime `gorm:"index;comment:创建时间" json:"createdAt,omitempty" swaggerignore:"true"`
  15. UpdatedAt util.JSONTime `gorm:"comment:更新时间" json:"updatedAt,omitempty" swaggerignore:"true"`
  16. }
  17. type BaseModelString struct {
  18. ID string `gorm:"comment:主键ID;primaryKey;type:varchar(191);" json:"id"`
  19. CreatedAt util.JSONTime `gorm:"index;comment:创建时间" json:"createdAt,omitempty" swaggerignore:"true"`
  20. UpdatedAt util.JSONTime `gorm:"comment:更新时间" json:"updatedAt,omitempty" swaggerignore:"true"`
  21. }
  22. func (b *BaseModelString) BeforeCreate(tx *gorm.DB) (err error) {
  23. if b.ID == "" {
  24. b.ID = snowflake.GenerateIdStr()
  25. }
  26. return
  27. }
  28. func WithTransaction(fns ...func(*gorm.DB) error) error {
  29. var err error
  30. tx := mysqlx.GetDB().Begin()
  31. defer func() {
  32. if r := recover(); r != nil {
  33. tx.Rollback()
  34. return
  35. } else if err == nil {
  36. tx.Commit()
  37. return
  38. }
  39. }()
  40. for _, fn := range fns {
  41. err = fn(tx)
  42. if err != nil {
  43. tx.Rollback()
  44. return err
  45. }
  46. }
  47. return nil
  48. }
  49. func Init() error {
  50. fmt.Printf("dsn=%v\n", conf.DbConf.Dsn)
  51. if err := mysqlx.Init(conf.DbConf, logx.GetLogger()); err != nil {
  52. return err
  53. }
  54. if err := RegisterTables(); err != nil {
  55. return err
  56. }
  57. InsertDefaultData()
  58. return nil
  59. }
  60. func RegisterTables() error {
  61. db := mysqlx.GetDB()
  62. err := db.AutoMigrate(
  63. Audio{},
  64. AudioText{},
  65. Text{},
  66. TrainInfo{},
  67. )
  68. return err
  69. }
  70. type InitDefaultData interface {
  71. InitDefaultData() error
  72. }
  73. func InsertDefaultData() {
  74. models := []interface{}{}
  75. for _, model := range models {
  76. if id, ok := model.(InitDefaultData); ok {
  77. if err := id.InitDefaultData(); err != nil {
  78. logx.Errorf("InitDefaultData for table: %v, err :%v", model.(schema.Tabler).TableName(), err.Error())
  79. }
  80. }
  81. }
  82. }