gameshield.go 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. package repository
  2. import (
  3. "context"
  4. "github.com/go-nunu/nunu-layout-advanced/internal/model"
  5. "time"
  6. )
  7. type GameShieldRepository interface {
  8. GetGameShieldById(ctx context.Context, id int64) (*model.GameShield, error)
  9. GetGameShieldDuplicateName(ctx context.Context, appName string, uid int) (int64, error)
  10. AddGameShield(ctx context.Context, gameShield *model.GameShield) error
  11. UpdateGameShield(ctx context.Context, gameShield *model.GameShield) error
  12. DeleteGameShield(ctx context.Context, ruleId int) error
  13. GetGameShieldIsBuy(ctx context.Context, uid int64) (int64, error)
  14. GetGameShieldNextduedate(ctx context.Context, uid int64, productID int) (string, error)
  15. GetGameShieldNameByDunName(ctx context.Context, appName string) (string, error)
  16. GetGameShieldHostIdByDunName(ctx context.Context, hostId string) (string, error)
  17. GetGameShieldRuleIdByAppName(ctx context.Context, appName string) (int, error)
  18. UpdateGameShieldByHostId(ctx context.Context, gameShield *model.GameShield) error
  19. GetGameShieldByHostId(ctx context.Context, hostId int) (*model.GameShield, error)
  20. GetHostById(ctx context.Context, id int) (string, error)
  21. GetSoonExpiredGameShields(ctx context.Context, daysThreshold int) ([]*model.GameShield, error)
  22. GetExpiredGameShields(ctx context.Context) ([]*model.GameShield, error)
  23. SyncExpireTimeFromHostNextDueDate(ctx context.Context, uid int, hostId int) error
  24. GetAllGameShield(ctx context.Context) ([]*model.GameShield, error)
  25. }
  26. func NewGameShieldRepository(
  27. repository *Repository,
  28. ) GameShieldRepository {
  29. return &gameShieldRepository{
  30. Repository: repository,
  31. }
  32. }
  33. type gameShieldRepository struct {
  34. *Repository
  35. }
  36. func (r *gameShieldRepository) GetGameShieldById(ctx context.Context, id int64) (*model.GameShield, error) {
  37. var res model.GameShield
  38. if err := r.DB(ctx).Where("id = ?", id).First(&res).Error; err != nil {
  39. return nil, err
  40. }
  41. return &res, nil
  42. }
  43. func (r *gameShieldRepository) GetGameShieldDuplicateName(ctx context.Context, appName string, uid int) (int64, error) {
  44. var count int64
  45. if err := r.DB(ctx).Model(&model.GameShield{}).Where("app_name = ?", appName).Where("uid = ?", uid).Count(&count).Error; err != nil {
  46. return 0, err
  47. }
  48. return count, nil
  49. }
  50. func (r *gameShieldRepository) AddGameShield(ctx context.Context, gameShield *model.GameShield) error {
  51. if err := r.DB(ctx).Create(gameShield).Error; err != nil {
  52. return err
  53. }
  54. return nil
  55. }
  56. func (r *gameShieldRepository) UpdateGameShield(ctx context.Context, gameShield *model.GameShield) error {
  57. if err := r.DB(ctx).Where("host_id = ?", gameShield.HostId).Updates(gameShield).Error; err != nil {
  58. return err
  59. }
  60. return nil
  61. }
  62. func (r *gameShieldRepository) DeleteGameShield(ctx context.Context, ruleId int) error {
  63. if err := r.DB(ctx).Where("rule_id = ?", ruleId).Delete(&model.GameShield{}).Error; err != nil {
  64. return err
  65. }
  66. return nil
  67. }
  68. func (r *gameShieldRepository) GetGameShieldIsBuy(ctx context.Context, uid int64) (int64, error) {
  69. var count int64
  70. if err := r.DB(ctx).Table("shd_host").
  71. Where("domainstatus = ?", "Active").
  72. Where("productid = ?", 67).
  73. Where("uid = ?", uid).
  74. Count(&count).Error; err != nil {
  75. return 0, err
  76. }
  77. return count, nil
  78. }
  79. func (r *gameShieldRepository) GetGameShieldNextduedate(ctx context.Context, uid int64, productID int) (string, error) {
  80. var nextDueDate string
  81. err := r.DB(ctx).Table("shd_host").
  82. Select("nextduedate").
  83. Where("id = ?", productID).
  84. Where("uid = ?", uid).
  85. Scan(&nextDueDate).Error
  86. if err != nil {
  87. return "", err
  88. }
  89. return nextDueDate, nil
  90. }
  91. func (r *gameShieldRepository) GetGameShieldNameByDunName(ctx context.Context, appName string) (string, error) {
  92. var res string
  93. if err := r.DB(ctx).Model(&model.GameShield{}).
  94. Where("app_name = ?", appName).
  95. Pluck("dun_name", &res).Error; err != nil {
  96. return "", err
  97. }
  98. return res, nil
  99. }
  100. func (r *gameShieldRepository) GetGameShieldHostIdByDunName(ctx context.Context, hostId string) (string, error) {
  101. var res string
  102. if err := r.DB(ctx).Model(&model.GameShield{}).
  103. Where("host_id = ?", hostId).
  104. Pluck("dun_name", &res).Error; err != nil {
  105. return "", err
  106. }
  107. return res, nil
  108. }
  109. func (r *gameShieldRepository) GetGameShieldRuleIdByAppName(ctx context.Context, appName string) (int, error) {
  110. var res int
  111. if err := r.DB(ctx).Model(&model.GameShield{}).
  112. Where("app_name = ?", appName).
  113. Pluck("rule_id", &res).Error; err != nil {
  114. return 0, err
  115. }
  116. return res, nil
  117. }
  118. func (r *gameShieldRepository) UpdateGameShieldByHostId(ctx context.Context, req *model.GameShield) error {
  119. if err := r.DB(ctx).Where("host_id = ?", req.HostId).Updates(req).Error; err != nil {
  120. return err
  121. }
  122. return nil
  123. }
  124. func (r *gameShieldRepository) GetGameShieldByHostId(ctx context.Context, hostId int) (*model.GameShield, error) {
  125. var res model.GameShield
  126. if err := r.DB(ctx).Where("host_id = ?", hostId).First(&res).Error; err != nil {
  127. return nil, err
  128. }
  129. return &res, nil
  130. }
  131. func (r *gameShieldRepository) GetHostById(ctx context.Context, id int) (string, error) {
  132. var res string
  133. if err := r.DB(ctx).Table("shd_host").
  134. Where("id = ?", id).
  135. Pluck("domain", &res).Error; err != nil {
  136. return "", err
  137. }
  138. return res, nil
  139. }
  140. // GetSoonExpiredGameShields 获取即将在指定天数内过期的记录
  141. func (r *gameShieldRepository) GetSoonExpiredGameShields(ctx context.Context, daysThreshold int) ([]*model.GameShield, error) {
  142. var shields []*model.GameShield
  143. // 当前时间戳
  144. nowTimestamp := time.Now().Unix()
  145. // 计算N天后的时间戳
  146. futureTimestamp := nowTimestamp + int64(daysThreshold*24*60*60)
  147. // 查询即将到期的记录 (过期时间在当前时间和N天后之间)
  148. if err := r.DB(ctx).
  149. Where("expire_time > ? AND expire_time < ?", nowTimestamp, futureTimestamp).
  150. Find(&shields).Error; err != nil {
  151. return nil, err
  152. }
  153. return shields, nil
  154. }
  155. // GetExpiredGameShields 获取已过期的记录
  156. func (r *gameShieldRepository) GetExpiredGameShields(ctx context.Context) ([]*model.GameShield, error) {
  157. var shields []*model.GameShield
  158. // 当前时间戳
  159. nowTimestamp := time.Now().Unix()
  160. // 查询已过期的记录(过期时间小于当前时间)
  161. if err := r.DB(ctx).
  162. Where("expire_time < ?", nowTimestamp).
  163. Find(&shields).Error; err != nil {
  164. return nil, err
  165. }
  166. return shields, nil
  167. }
  168. // SyncExpireTimeFromHostNextDueDate 同步host表的nextduedate到game_shield表的ExpireTime
  169. func (r *gameShieldRepository) SyncExpireTimeFromHostNextDueDate(ctx context.Context, uid int, hostId int) error {
  170. var nextduedate int64
  171. // 先从shd_host表获取nextduedate
  172. err := r.DB(ctx).Table("shd_host").
  173. Select("nextduedate").
  174. Where("id = ?", hostId).
  175. Where("uid = ?", uid).
  176. Scan(&nextduedate).Error
  177. if err != nil {
  178. return err
  179. }
  180. // 更新shd_game_shield表的ExpireTime
  181. return r.DB(ctx).Model(&model.GameShield{}).
  182. Where("host_id = ?", hostId).
  183. Where("uid = ?", uid).
  184. Update("expire_time", nextduedate).Error
  185. }
  186. func (r *gameShieldRepository) GetAllGameShield(ctx context.Context) ([]*model.GameShield, error) {
  187. var res []*model.GameShield
  188. if err := r.DB(ctx).Model(&model.GameShield{}).Find(&res).Error; err != nil {
  189. return nil, err
  190. }
  191. return res, nil
  192. }