diff --git a/src/challenges/challenges.service.ts b/src/challenges/challenges.service.ts index 08630ee..9dd5dfa 100644 --- a/src/challenges/challenges.service.ts +++ b/src/challenges/challenges.service.ts @@ -473,38 +473,51 @@ export class ChallengesService { } } + this.winstonLogger.info('progress report updated', { + context: 'reportProgress', + userId, + challengeId, + reportDate, + reportedValue, + }) + + // 🎖️ 检查是否为睡眠挑战且完成了第一次打卡,授予 goodSleep 勋章 + if (challenge.type === ChallengeType.SLEEP) { + this.winstonLogger.info('检查是否为睡眠挑战且完成了第一次打卡,授予 goodSleep 勋章', { + context: 'reportProgress', + userId, + challengeId, + badgeCode: 'goodSleep', + }) + try { + await this.badgeService.awardBadge(userId, 'goodSleep', { + source: BadgeSource.CHALLENGE, + sourceId: challengeId, + metadata: { + challengeName: challenge.title, + challengeType: challenge.type, + }, + }); + this.winstonLogger.info('授予睡眠挑战勋章成功', { + context: 'reportProgress', + userId, + challengeId, + badgeCode: 'goodSleep', + }); + } catch (error) { + // 勋章授予失败不应影响主流程,仅记录日志 + this.winstonLogger.error('授予睡眠挑战勋章失败', { + context: 'reportProgress', + userId, + challengeId, + error: error instanceof Error ? error.message : '未知错误', + }); + } + } if (report.reportedValue >= reportCompletedValue && !dayjs(participant.lastProgressAt).isSame(dayjs(), 'd')) { participant.progressValue++ participant.lastProgressAt = now; - - // 🎖️ 检查是否为睡眠挑战且完成了第一次打卡,授予 goodSleep 勋章 - if (challenge.type === ChallengeType.SLEEP) { - try { - await this.badgeService.awardBadge(userId, 'goodSleep', { - source: BadgeSource.CHALLENGE, - sourceId: challengeId, - metadata: { - challengeName: challenge.title, - challengeType: challenge.type, - }, - }); - this.winstonLogger.info('授予睡眠挑战勋章成功', { - context: 'reportProgress', - userId, - challengeId, - badgeCode: 'goodSleep', - }); - } catch (error) { - // 勋章授予失败不应影响主流程,仅记录日志 - this.winstonLogger.error('授予睡眠挑战勋章失败', { - context: 'reportProgress', - userId, - challengeId, - error: error instanceof Error ? error.message : '未知错误', - }); - } - } } if (participant.progressValue >= (participant.challenge?.minimumCheckInDays || 0) && participant.status !== ChallengeParticipantStatus.COMPLETED) { diff --git a/src/push-notifications/push-test.service.ts b/src/push-notifications/push-test.service.ts index b5c94be..d3a6ef3 100644 --- a/src/push-notifications/push-test.service.ts +++ b/src/push-notifications/push-test.service.ts @@ -32,7 +32,7 @@ export class PushTestService implements OnModuleInit { async onModuleInit() { // 检查是否启用推送测试 const enablePushTest = this.configService.get('ENABLE_PUSH_TEST', false); - + return if (!enablePushTest) { this.logger.log('Push test is disabled. Skipping...'); return; diff --git a/src/users/models/user-badge.model.ts b/src/users/models/user-badge.model.ts index 221cd43..51d06b2 100644 --- a/src/users/models/user-badge.model.ts +++ b/src/users/models/user-badge.model.ts @@ -31,11 +31,11 @@ export enum BadgeSource { }) export class UserBadge extends Model { @Column({ - type: DataType.INTEGER, + type: DataType.CHAR(36), + defaultValue: DataType.UUIDV4, primaryKey: true, - autoIncrement: true, }) - declare id: number; + declare id: string; @ForeignKey(() => User) @Column({ diff --git a/src/users/services/badge.service.ts b/src/users/services/badge.service.ts index 4854fcc..d786fd0 100644 --- a/src/users/services/badge.service.ts +++ b/src/users/services/badge.service.ts @@ -78,7 +78,7 @@ export class BadgeService { * @param userId 用户ID */ async getUserBadges(userId: string): Promise