fix: TypeScript errors — string→number, activityDate, remove easeFactor from update
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 42s
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 42s
- import-candidate: explicit any[] type for safeCandidates - growth: date→activityDate (actual DailyLearningActivity field name) - review: Number(rating) for SM-2 math, remove easeFactor from updateCard call Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
3f2ba8ba93
commit
4be418ef4a
@ -73,7 +73,7 @@ export class ImportCandidateService {
|
||||
|
||||
async createCandidates(userId: string, knowledgeBaseId: string, sourceId: string, importId: string, candidates: Array<any>) {
|
||||
// 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);
|
||||
|
||||
@ -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<string>();
|
||||
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;
|
||||
|
||||
@ -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 };
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user