fix: restrict manager vip gifts

This commit is contained in:
hy001 2026-05-17 00:34:56 +08:00
parent dbd073b97f
commit 6d90ddeee0
4 changed files with 32 additions and 4 deletions

View File

@ -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

View File

@ -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)

View File

@ -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"

View File

@ -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 {