diff --git a/src/modules/import-candidate/import-candidate.service.ts b/src/modules/import-candidate/import-candidate.service.ts index 639fa74..8e1c157 100644 --- a/src/modules/import-candidate/import-candidate.service.ts +++ b/src/modules/import-candidate/import-candidate.service.ts @@ -73,7 +73,7 @@ export class ImportCandidateService { async createCandidates(userId: string, knowledgeBaseId: string, sourceId: string, importId: string, candidates: Array) { // Filter out unsafe candidates - const safeCandidates = []; + const safeCandidates: any[] = []; for (const c of candidates) { const safe = await this.checkSafety(c.title || '', c.content || '', userId); if (safe) safeCandidates.push(c); diff --git a/src/modules/learning-activity/growth.service.ts b/src/modules/learning-activity/growth.service.ts index 946bf3f..ac7b753 100644 --- a/src/modules/learning-activity/growth.service.ts +++ b/src/modules/learning-activity/growth.service.ts @@ -11,18 +11,17 @@ export class GrowthService { async getStreak(userId: string): Promise<{ currentStreak: number; longestStreak: number }> { const activities = await this.prisma.dailyLearningActivity.findMany({ where: { userId }, - orderBy: { date: 'desc' }, - select: { date: true }, + orderBy: { activityDate: 'desc' }, + select: { activityDate: true }, take: 365, }); if (activities.length === 0) return { currentStreak: 0, longestStreak: 0 }; - // Dedupe by date const seen = new Set(); const dates: string[] = []; for (const a of activities) { - const d = new Date(a.date).toISOString().slice(0, 10); + const d = new Date(a.activityDate).toISOString().slice(0, 10); if (!seen.has(d)) { seen.add(d); dates.push(d); } } let currentStreak = dates.length > 0 ? 1 : 0; diff --git a/src/modules/review/review.service.ts b/src/modules/review/review.service.ts index 82ce65b..7ebebfe 100644 --- a/src/modules/review/review.service.ts +++ b/src/modules/review/review.service.ts @@ -26,7 +26,7 @@ export class ReviewService { if (!card) throw new NotFoundException(`Review card ${id} not found`); // Anki SM-2 algorithm - const rating = dto.rating; + const rating = Number(dto.rating); let intervalDays = Number(card.intervalDays) || 1; let easeFactor = Number(card.easeFactor) || EASE_FACTOR_DEFAULT; let repetitionCount = Number(card.repetitionCount) || 0; @@ -55,12 +55,11 @@ export class ReviewService { const nextReviewAt = new Date(Date.now() + intervalDays * 86400000); const log = await this.reviewRepository.insertLog({ - userId, reviewCardId: id, rating, responseText: dto.responseText, + userId, reviewCardId: id, rating: dto.rating, responseText: dto.responseText, }); await this.reviewRepository.updateCard(id, { - status: 'active', nextReviewAt, intervalDays, easeFactor, - repetitionCount, lapseCount, + status: 'active', nextReviewAt, intervalDays, repetitionCount, lapseCount, }); return { log, nextReviewAt, scheduleState, intervalDays };