123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- package service
- import (
- "context"
- "errors"
- "github.com/go-nunu/nunu-layout-advanced/internal/model"
- "github.com/go-nunu/nunu-layout-advanced/internal/repository"
- "gorm.io/gorm"
- "time"
- )
- type GameShieldPublicIpService interface {
- GetGameShieldPublicIp(ctx context.Context, id int64) (*model.GameShieldPublicIp, error)
- GetGameShieldPublicUserIp(ctx context.Context, uid int) (string, error)
- GetGameShieldPublicUserIpByNew(ctx context.Context) (model.GameShieldPublicIp, error)
- UpdateGameShieldPublicUserIp(ctx context.Context, uid int, updateTime string) error
- GetUserIp(ctx context.Context, uid int) (string, error)
- }
- func NewGameShieldPublicIpService(
- service *Service,
- gameShieldPublicIpRepository repository.GameShieldPublicIpRepository,
- gameShieldUserIpRepository repository.GameShieldUserIpRepository,
- ) GameShieldPublicIpService {
- return &gameShieldPublicIpService{
- Service: service,
- gameShieldPublicIpRepository: gameShieldPublicIpRepository,
- gameShieldUserIpRepository: gameShieldUserIpRepository,
- }
- }
- type gameShieldPublicIpService struct {
- *Service
- gameShieldPublicIpRepository repository.GameShieldPublicIpRepository
- gameShieldUserIpRepository repository.GameShieldUserIpRepository
- }
- func (s *gameShieldPublicIpService) GetGameShieldPublicIp(ctx context.Context, id int64) (*model.GameShieldPublicIp, error) {
- return s.gameShieldPublicIpRepository.GetGameShieldPublicIp(ctx, id)
- }
- func (s *gameShieldPublicIpService) GetGameShieldPublicUserIp(ctx context.Context, uid int) (string, error) {
- ipId, err := s.gameShieldUserIpRepository.GetGameShieldUserIpByUid(ctx, int64(uid))
- if err != nil {
- return "", err
- }
- if ipId == 0 {
- return "", gorm.ErrRecordNotFound
- }
- ip, err := s.gameShieldPublicIpRepository.GetGameShieldPublicUserIp(ctx, ipId)
- if err != nil {
- return "", err
- }
- return ip, nil
- }
- func (s *gameShieldPublicIpService) GetGameShieldPublicUserIpByNew(ctx context.Context) (model.GameShieldPublicIp, error) {
- res, err := s.gameShieldPublicIpRepository.GetGameShieldPublicUserIpByNew(ctx)
- if err != nil {
- return model.GameShieldPublicIp{}, err
- }
- return res, nil
- }
- func (s *gameShieldPublicIpService) UpdateGameShieldPublicUserIp(ctx context.Context, id int, updateTime string) error {
- if err := s.gameShieldPublicIpRepository.UpdateGameShieldPublicUserIp(ctx, id, updateTime); err != nil {
- return err
- }
- return nil
- }
- func (s *gameShieldPublicIpService) GetUserIp(ctx context.Context, uid int) (string, error) {
- var ip string
- ip, err := s.GetGameShieldPublicUserIp(ctx, uid)
- if err == nil {
- return ip, nil
- }
- var ipId int
- // 如果不是记录未找到,直接返回错误
- if !errors.Is(err, gorm.ErrRecordNotFound) {
- return "", err
- }
- // 分配新 IP(可能失败)
- res, err := s.GetGameShieldPublicUserIpByNew(ctx)
- if err != nil {
- return "", err
- }
- ip = res.Ip
- ipId = res.Id
- if len(ip) == 0 {
- res, err := s.gameShieldPublicIpRepository.GetGameShieldPublicUserIpByOld(ctx)
- if err != nil {
- return "", err
- }
- ip = res.Ip
- ipId = res.Id
- }
- // 更新绑定关系
- var updateTime string
- updateTime = time.Now().Format("2006-01-02 15:04:05")
- if err := s.UpdateGameShieldPublicUserIp(ctx, ipId, updateTime); err != nil {
- return "", err
- }
- if err := s.gameShieldUserIpRepository.AddGameShieldUserIp(ctx, &model.GameShieldUserIp{Uid: uid, IpId: ipId}); err != nil {
- return "", err
- }
- return ip, nil
- }
|