model.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. package model
  2. import (
  3. "fmt"
  4. "github.com/0xJacky/Nginx-UI/internal/logger"
  5. "github.com/0xJacky/Nginx-UI/settings"
  6. "github.com/gin-gonic/gin"
  7. "gorm.io/driver/sqlite"
  8. "gorm.io/gen"
  9. "gorm.io/gorm"
  10. gormlogger "gorm.io/gorm/logger"
  11. "path"
  12. "time"
  13. )
  14. var db *gorm.DB
  15. type Model struct {
  16. ID int `gorm:"primary_key" json:"id"`
  17. CreatedAt time.Time `json:"created_at"`
  18. UpdatedAt time.Time `json:"updated_at"`
  19. DeletedAt *gorm.DeletedAt `gorm:"index" json:"deleted_at"`
  20. }
  21. func GenerateAllModel() []any {
  22. return []any{
  23. ConfigBackup{},
  24. User{},
  25. AuthToken{},
  26. Cert{},
  27. ChatGPTLog{},
  28. Site{},
  29. Stream{},
  30. DnsCredential{},
  31. Environment{},
  32. Notification{},
  33. AcmeUser{},
  34. BanIP{},
  35. Config{},
  36. Passkey{},
  37. }
  38. }
  39. func logMode() gormlogger.Interface {
  40. switch settings.ServerSettings.RunMode {
  41. case gin.ReleaseMode:
  42. return gormlogger.Default.LogMode(gormlogger.Warn)
  43. default:
  44. fallthrough
  45. case gin.DebugMode:
  46. return gormlogger.Default.LogMode(gormlogger.Info)
  47. }
  48. }
  49. func UseDB() *gorm.DB {
  50. return db
  51. }
  52. func Init() *gorm.DB {
  53. dbPath := path.Join(path.Dir(settings.ConfPath), fmt.Sprintf("%s.db", settings.ServerSettings.Database))
  54. var err error
  55. db, err = gorm.Open(sqlite.Open(dbPath), &gorm.Config{
  56. Logger: logMode(),
  57. PrepareStmt: true,
  58. DisableForeignKeyConstraintWhenMigrating: true,
  59. })
  60. if err != nil {
  61. logger.Fatal(err.Error())
  62. }
  63. // Migrate the schema
  64. err = db.AutoMigrate(GenerateAllModel()...)
  65. if err != nil {
  66. logger.Fatal(err.Error())
  67. }
  68. return db
  69. }
  70. type Pagination struct {
  71. Total int64 `json:"total"`
  72. PerPage int `json:"per_page"`
  73. CurrentPage int `json:"current_page"`
  74. TotalPages int64 `json:"total_pages"`
  75. }
  76. type DataList struct {
  77. Data interface{} `json:"data"`
  78. Pagination Pagination `json:"pagination,omitempty"`
  79. }
  80. func TotalPage(total int64, pageSize int) int64 {
  81. n := total / int64(pageSize)
  82. if total%int64(pageSize) > 0 {
  83. n++
  84. }
  85. return n
  86. }
  87. type Method interface {
  88. // FirstByID Where("id=@id")
  89. FirstByID(id int) (*gen.T, error)
  90. // DeleteByID update @@table set deleted_at=strftime('%Y-%m-%d %H:%M:%S','now') where id=@id
  91. DeleteByID(id int) error
  92. }