db.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  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. )
  67. return err
  68. }
  69. type InitDefaultData interface {
  70. InitDefaultData() error
  71. }
  72. func InsertDefaultData() {
  73. models := []interface{}{}
  74. for _, model := range models {
  75. if id, ok := model.(InitDefaultData); ok {
  76. if err := id.InitDefaultData(); err != nil {
  77. logx.Errorf("InitDefaultData for table: %v, err :%v", model.(schema.Tabler).TableName(), err.Error())
  78. }
  79. }
  80. }
  81. }