From 6d90ddeee0b0918e161264faf57fb267eacf8d59 Mon Sep 17 00:00:00 2001 From: hy001 Date: Sun, 17 May 2026 00:34:56 +0800 Subject: [PATCH] fix: restrict manager vip gifts --- internal/service/managercenter/service.go | 2 +- .../service/managercenter/service_test.go | 26 +++++++++++++++++++ internal/service/managercenter/types.go | 5 ++-- internal/service/managercenter/vip_gift.go | 3 ++- 4 files changed, 32 insertions(+), 4 deletions(-) diff --git a/internal/service/managercenter/service.go b/internal/service/managercenter/service.go index e8d95a0..20fcf3e 100644 --- a/internal/service/managercenter/service.go +++ b/internal/service/managercenter/service.go @@ -535,7 +535,7 @@ func (s *Service) loadGiftableNobleVIPAbility(ctx context.Context, propsID int64 if err != nil { return propsNobleVIPAbilityRow{}, serverError("vip_ability_query_failed", err.Error()) } - if row.VIPLevel > 3 { + if row.VIPLevel > maxGiftableVIPLevel { return propsNobleVIPAbilityRow{}, badRequest("vip_not_giftable", "only noble VIP level 1-3 can be gifted") } return row, nil diff --git a/internal/service/managercenter/service_test.go b/internal/service/managercenter/service_test.go index 79d28f0..527be9c 100644 --- a/internal/service/managercenter/service_test.go +++ b/internal/service/managercenter/service_test.go @@ -135,6 +135,7 @@ func TestListPropsReturnsVIPLevelConfigs(t *testing.T) { model.VipLevelConfig{ID: 301, SysOrigin: "LIKEI", Level: 1, LevelCode: "VIP1", DisplayName: "VIP 1", Enabled: true, DurationDays: 30}, model.VipLevelConfig{ID: 302, SysOrigin: "LIKEI", Level: 2, LevelCode: "VIP2", DisplayName: "VIP 2", Enabled: false, DurationDays: 30}, model.VipLevelConfig{ID: 303, SysOrigin: "ATYOU", Level: 1, LevelCode: "VIP1", DisplayName: "ATYOU VIP 1", Enabled: true, DurationDays: 30}, + model.VipLevelConfig{ID: 304, SysOrigin: "LIKEI", Level: 4, LevelCode: "VIP4", DisplayName: "VIP 4", Enabled: true, DurationDays: 30}, ) resp, err := service.ListProps(context.Background(), AuthUser{UserID: 1, SysOrigin: "LIKEI"}, propsTypeNobleVIP) @@ -307,6 +308,31 @@ func TestSendVIPUsesVIPLevelConfig(t *testing.T) { } } +func TestSendVIPRejectsLevelAboveGiftLimit(t *testing.T) { + service, _ := newManagerCenterTestService(t) + db := service.db.(*gorm.DB) + seedManager(t, db, 1) + seedUsers(t, db, + userBaseInfoRow{ID: 1, Account: "1", UserNickname: "manager", OriginSys: "LIKEI"}, + userBaseInfoRow{ID: 2, Account: "2", OriginSys: "LIKEI"}, + ) + seedVIPConfigs(t, db, model.VipLevelConfig{ + ID: 304, + SysOrigin: "LIKEI", + Level: 4, + LevelCode: "VIP4", + DisplayName: "VIP 4", + Enabled: true, + DurationDays: 30, + }) + + _, err := service.SendProps(context.Background(), AuthUser{UserID: 1, SysOrigin: "LIKEI"}, SendPropsRequest{ + AcceptUserID: ID(2), + PropsID: ID(304), + }) + assertAppErrorCode(t, err, "vip_not_giftable") +} + func TestBanUserRejectsRechargedUser(t *testing.T) { service, fake := newManagerCenterTestService(t) db := service.db.(*gorm.DB) diff --git a/internal/service/managercenter/types.go b/internal/service/managercenter/types.go index dd76e7b..31af120 100644 --- a/internal/service/managercenter/types.go +++ b/internal/service/managercenter/types.go @@ -27,8 +27,9 @@ const ( vipGiftOrigin = "VIP_PURCHASE" vipGiftOriginDesc = "VIP purchase" - defaultGiftDays = 7 - defaultVIPGiftDays = 30 + defaultGiftDays = 7 + defaultVIPGiftDays = 30 + maxGiftableVIPLevel = 3 accountStatusNormal = "NORMAL" accountStatusFreeze = "FREEZE" diff --git a/internal/service/managercenter/vip_gift.go b/internal/service/managercenter/vip_gift.go index bd100a7..a9da3fd 100644 --- a/internal/service/managercenter/vip_gift.go +++ b/internal/service/managercenter/vip_gift.go @@ -63,6 +63,7 @@ func (s *Service) listVIPProps(ctx context.Context, user AuthUser) (*PropsListRe var rows []model.VipLevelConfig if err := s.db.WithContext(ctx). Where("sys_origin = ? AND enabled = ?", sysOrigin, true). + Where("level BETWEEN ? AND ?", 1, maxGiftableVIPLevel). Order("level ASC"). Find(&rows).Error; err != nil { return nil, serverError("vip_config_query_failed", err.Error()) @@ -87,7 +88,7 @@ func (s *Service) sendVIPGift(ctx context.Context, manager AuthUser, target user if !config.Enabled { return nil, badRequest("vip_level_disabled", "vip level is disabled") } - if config.Level < 1 || config.Level > 5 { + if config.Level < 1 || config.Level > maxGiftableVIPLevel { return nil, badRequest("vip_not_giftable", "vip level is invalid") } if config.DurationDays <= 0 {