diff --git a/src/challenges/challenges.service.ts b/src/challenges/challenges.service.ts index 077c79f..52ccbde 100644 --- a/src/challenges/challenges.service.ts +++ b/src/challenges/challenges.service.ts @@ -856,6 +856,29 @@ export class ChallengesService { throw new BadRequestException('无效的时间戳'); } + // 获取用户信息,检查会员状态 + const user = await User.findByPk(userId); + if (!user) { + throw new NotFoundException('用户不存在'); + } + + // 检查非会员用户已创建的未归档挑战数量 + if (!user.isVip) { + const existingChallengeCount = await this.challengeModel.count({ + where: { + creatorId: userId, + source: ChallengeSource.CUSTOM, + challengeState: { + [Op.ne]: ChallengeState.ARCHIVED, // 不包含已归档的挑战 + }, + }, + }); + + if (existingChallengeCount >= 1) { + throw new BadRequestException('非会员用户只能创建一个挑战,您可以先归档现有挑战或升级会员'); + } + } + // 检查创建频率限制(每天最多创建 5 个) const recentCount = await this.challengeModel.count({ where: { @@ -908,6 +931,8 @@ export class ChallengesService { userId, challengeId: challenge.id, shareCode, + isVip: user.isVip, + existingChallengeCount: user.isVip ? null : 1, }); return this.buildCustomChallengeResponse(challenge, userId);