12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- package service
- import (
- "context"
- "errors"
- "fmt"
- "github.com/go-nunu/nunu-layout-advanced/internal/model"
- "github.com/go-nunu/nunu-layout-advanced/internal/repository"
- "gorm.io/gorm"
- )
- type GameShieldPublicIpService interface {
- GetGameShieldPublicIp(ctx context.Context, id int64) (*model.GameShieldPublicIp, error)
- GetGameShieldPublicUserIp(ctx context.Context, uid int) (string, error)
- AddGameShieldPublicUserIp(ctx context.Context) (string, error)
- UpdateGameShieldPublicUserIp(ctx context.Context, uid int, ip string) error
- GetUserIp(ctx context.Context, uid int) (string, error)
- }
- func NewGameShieldPublicIpService(
- service *Service,
- gameShieldPublicIpRepository repository.GameShieldPublicIpRepository,
- ) GameShieldPublicIpService {
- return &gameShieldPublicIpService{
- Service: service,
- gameShieldPublicIpRepository: gameShieldPublicIpRepository,
- }
- }
- type gameShieldPublicIpService struct {
- *Service
- gameShieldPublicIpRepository repository.GameShieldPublicIpRepository
- }
- 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) {
- ip, err := s.gameShieldPublicIpRepository.GetGameShieldPublicUserIp(ctx, uid)
- if err != nil {
- if errors.Is(err, gorm.ErrRecordNotFound) {
- return "", fmt.Errorf("该用户未绑定IP")
- }
- return "", err
- }
- return ip, nil
- }
- func (s *gameShieldPublicIpService) AddGameShieldPublicUserIp(ctx context.Context) (string, error) {
- ip, err := s.gameShieldPublicIpRepository.AddGameShieldPublicUserIp(ctx)
- if err != nil {
- if errors.Is(err, gorm.ErrRecordNotFound) {
- return "", fmt.Errorf("没有足够的IP: %w", err)
- }
- return "", err
- }
- return ip, nil
- }
- func (s *gameShieldPublicIpService) UpdateGameShieldPublicUserIp(ctx context.Context, uid int, ip string) error {
- if err := s.gameShieldPublicIpRepository.UpdateGameShieldPublicUserIp(ctx, uid, ip); err != nil {
- return err
- }
- return nil
- }
- func (s *gameShieldPublicIpService) GetUserIp(ctx context.Context, uid int) (string, error) {
- ip, err := s.GetGameShieldPublicUserIp(ctx, uid)
- if err == nil {
- return ip, nil
- }
- // 如果不是记录未找到,直接返回错误
- if !errors.Is(err, gorm.ErrRecordNotFound) {
- return "", err
- }
- // 分配新 IP(可能失败)
- ip, err = s.AddGameShieldPublicUserIp(ctx)
- if err != nil {
- return "", err
- }
- // 更新绑定关系
- if err := s.UpdateGameShieldPublicUserIp(ctx, uid, ip); err != nil {
- return "", err
- }
- return ip, nil
- }
|