feat: 增加基于本周填写邀请码数量的邀请翻牌校验

- 注入 ISqlSugarRepository<InvitationRecordAggregateRoot> 到 CardFlipManager 并更新构造函数。
- 在邀请类型(FlipType.Invite)翻牌时,改为校验用户本周已填写的邀请码数量是否满足本次翻牌所需(根据 InviteFlipsUsed 计算所需数量),不足则抛出友好异常提示。
- 保持原有错误处理与日志逻辑不变。
This commit is contained in:
chenchun
2025-10-30 20:13:49 +08:00
parent f02fb91175
commit e9099bbe04

View File

@@ -11,6 +11,7 @@ namespace Yi.Framework.AiHub.Domain.Managers;
public class CardFlipManager : DomainService public class CardFlipManager : DomainService
{ {
private readonly ISqlSugarRepository<CardFlipTaskAggregateRoot> _cardFlipTaskRepository; private readonly ISqlSugarRepository<CardFlipTaskAggregateRoot> _cardFlipTaskRepository;
private readonly ISqlSugarRepository<InvitationRecordAggregateRoot> _invitationRecordRepository;
private readonly InviteCodeManager _inviteCodeManager; private readonly InviteCodeManager _inviteCodeManager;
private readonly ILogger<CardFlipManager> _logger; private readonly ILogger<CardFlipManager> _logger;
@@ -32,10 +33,12 @@ public class CardFlipManager : DomainService
public CardFlipManager( public CardFlipManager(
ISqlSugarRepository<CardFlipTaskAggregateRoot> cardFlipTaskRepository, ISqlSugarRepository<CardFlipTaskAggregateRoot> cardFlipTaskRepository,
ISqlSugarRepository<InvitationRecordAggregateRoot> invitationRecordRepository,
InviteCodeManager inviteCodeManager, InviteCodeManager inviteCodeManager,
ILogger<CardFlipManager> logger) ILogger<CardFlipManager> logger)
{ {
_cardFlipTaskRepository = cardFlipTaskRepository; _cardFlipTaskRepository = cardFlipTaskRepository;
_invitationRecordRepository = invitationRecordRepository;
_inviteCodeManager = inviteCodeManager; _inviteCodeManager = inviteCodeManager;
_logger = logger; _logger = logger;
} }
@@ -109,13 +112,23 @@ public class CardFlipManager : DomainService
throw new UserFriendlyException(GetFlipTypeErrorMessage(flipType)); throw new UserFriendlyException(GetFlipTypeErrorMessage(flipType));
} }
// 如果是邀请类型翻牌,必须验证用户已使用过邀请码 // 如果是邀请类型翻牌,必须验证用户本周填写的邀请码数量足够
if (flipType == FlipType.Invite) if (flipType == FlipType.Invite)
{ {
var isInvited = await _inviteCodeManager.IsUserInvitedAsync(userId); // 查询本周已使用的邀请码数量
if (!isInvited) var weeklyInviteCodeUsedCount = await _invitationRecordRepository._DbQueryable
.Where(x => x.InvitedUserId == userId)
.Where(x => x.InvitationTime >= weekStart)
.CountAsync();
// 本周填写的邀请码数量必须 >= 即将使用的邀请翻牌次数
// 例如: 要翻第8次(InviteFlipsUsed=0->1), 需要至少填写了1个邀请码
// 要翻第9次(InviteFlipsUsed=1->2), 需要至少填写了2个邀请码
// 要翻第10次(InviteFlipsUsed=2->3), 需要至少填写了3个邀请码
var requiredInviteCodeCount = task.InviteFlipsUsed + 1;
if (weeklyInviteCodeUsedCount < requiredInviteCodeCount)
{ {
throw new UserFriendlyException("需要使用他人邀请码才能解锁更多翻牌次数"); throw new UserFriendlyException($"需要使用{requiredInviteCodeCount}个他人邀请码才能解锁第{task.TotalFlips + 1}次翻牌");
} }
} }