feat: 增加基于本周填写邀请码数量的邀请翻牌校验
- 注入 ISqlSugarRepository<InvitationRecordAggregateRoot> 到 CardFlipManager 并更新构造函数。 - 在邀请类型(FlipType.Invite)翻牌时,改为校验用户本周已填写的邀请码数量是否满足本次翻牌所需(根据 InviteFlipsUsed 计算所需数量),不足则抛出友好异常提示。 - 保持原有错误处理与日志逻辑不变。
This commit is contained in:
@@ -11,6 +11,7 @@ namespace Yi.Framework.AiHub.Domain.Managers;
|
||||
public class CardFlipManager : DomainService
|
||||
{
|
||||
private readonly ISqlSugarRepository<CardFlipTaskAggregateRoot> _cardFlipTaskRepository;
|
||||
private readonly ISqlSugarRepository<InvitationRecordAggregateRoot> _invitationRecordRepository;
|
||||
private readonly InviteCodeManager _inviteCodeManager;
|
||||
private readonly ILogger<CardFlipManager> _logger;
|
||||
|
||||
@@ -32,10 +33,12 @@ public class CardFlipManager : DomainService
|
||||
|
||||
public CardFlipManager(
|
||||
ISqlSugarRepository<CardFlipTaskAggregateRoot> cardFlipTaskRepository,
|
||||
ISqlSugarRepository<InvitationRecordAggregateRoot> invitationRecordRepository,
|
||||
InviteCodeManager inviteCodeManager,
|
||||
ILogger<CardFlipManager> logger)
|
||||
{
|
||||
_cardFlipTaskRepository = cardFlipTaskRepository;
|
||||
_invitationRecordRepository = invitationRecordRepository;
|
||||
_inviteCodeManager = inviteCodeManager;
|
||||
_logger = logger;
|
||||
}
|
||||
@@ -109,13 +112,23 @@ public class CardFlipManager : DomainService
|
||||
throw new UserFriendlyException(GetFlipTypeErrorMessage(flipType));
|
||||
}
|
||||
|
||||
// 如果是邀请类型翻牌,必须验证用户已使用过邀请码
|
||||
// 如果是邀请类型翻牌,必须验证用户本周填写的邀请码数量足够
|
||||
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}次翻牌");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user