gameshieldpublicip.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package repository
  2. import (
  3. "context"
  4. "github.com/go-nunu/nunu-layout-advanced/internal/model"
  5. "gorm.io/gorm/clause"
  6. )
  7. type GameShieldPublicIpRepository interface {
  8. GetGameShieldPublicIp(ctx context.Context, id int64) (*model.GameShieldPublicIp, error)
  9. GetGameShieldPublicUserIp(ctx context.Context, uid int) (string, error)
  10. AddGameShieldPublicUserIp(ctx context.Context) (string, error)
  11. UpdateGameShieldPublicUserIp(ctx context.Context, uid int, ip string) error
  12. }
  13. func NewGameShieldPublicIpRepository(
  14. repository *Repository,
  15. ) GameShieldPublicIpRepository {
  16. return &gameShieldPublicIpRepository{
  17. Repository: repository,
  18. }
  19. }
  20. type gameShieldPublicIpRepository struct {
  21. *Repository
  22. }
  23. func (r *gameShieldPublicIpRepository) GetGameShieldPublicIp(ctx context.Context, id int64) (*model.GameShieldPublicIp, error) {
  24. var gameShieldPublicIp model.GameShieldPublicIp
  25. return &gameShieldPublicIp, nil
  26. }
  27. func (r *gameShieldPublicIpRepository) GetGameShieldPublicUserIp(ctx context.Context, uid int) (string, error) {
  28. var ip string
  29. if err := r.DB(ctx).Model(&model.GameShieldPublicIp{}).Select("ip").Where("uid = ?", uid).Scan(&ip).Error; err != nil {
  30. return "", err
  31. }
  32. return ip, nil
  33. }
  34. func (r *gameShieldPublicIpRepository) AddGameShieldPublicUserIp(ctx context.Context) (string, error) {
  35. var ip string
  36. if err := r.DB(ctx).Model(&model.GameShieldPublicIp{}).Select("ip").
  37. Where("uid IS NULL").
  38. Order("RAND()").
  39. Clauses(clause.Locking{Strength: "UPDATE"}).
  40. Limit(1).
  41. Scan(&ip).Error; err != nil {
  42. return "", err
  43. }
  44. return ip, nil
  45. }
  46. func (r *gameShieldPublicIpRepository) UpdateGameShieldPublicUserIp(ctx context.Context, uid int, ip string) error {
  47. if err := r.DB(ctx).Model(&model.GameShieldPublicIp{}).
  48. Where("uid IS NULL").
  49. Where("ip = ?", ip).
  50. Update("uid", uid).Error; err != nil {
  51. return err
  52. }
  53. return nil
  54. }