chapter_logs_scope.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. package model
  2. import (
  3. "fmt"
  4. "gorm.io/gorm"
  5. )
  6. // DynamicChapterLog 动态章节表名(章节表分表)
  7. type DynamicChapterLog interface {
  8. ChapterInfo() string
  9. }
  10. // ChapterLogTable gormDB的scopes, 根据clog来获取对应的表名
  11. func ChapterLogTable(clog ChapterLog) func(tx *gorm.DB) *gorm.DB {
  12. return func(tx *gorm.DB) *gorm.DB {
  13. return tx.Table(clog.ChapterInfo())
  14. }
  15. }
  16. func ChapterLogTableSetNum(n int) func(tx *gorm.DB) *gorm.DB {
  17. return func(tx *gorm.DB) *gorm.DB {
  18. return tx.Table(fmt.Sprintf("chapter_logs_%v", n))
  19. }
  20. }
  21. // ChapterInfo 章节id作为表后缀 事件12,13为章节用户信息上报的,统计到单独的表里(暂定保存1个月的,超期则压缩,看数据情况而定TODO)
  22. func (clog *ChapterLog) ChapterInfo() string {
  23. return GetChapterTable(clog.EventID, clog.ChapterID)
  24. }
  25. func GetChapterTable(eventID, chapterID int32) string {
  26. if eventID == 13 || eventID == 12 {
  27. return "chapter_logs_user_details"
  28. }
  29. return fmt.Sprintf("chapter_logs_%d", chapterID)
  30. }
  31. func GetChapterTable2(chapterID int32) string {
  32. return fmt.Sprintf("chapter_logs_%d", chapterID)
  33. }
  34. func ChapterLogTableSetName(name string) func(tx *gorm.DB) *gorm.DB {
  35. return func(tx *gorm.DB) *gorm.DB {
  36. return tx.Table(name)
  37. }
  38. }