api-server/src/modules/learning-activity/learning-activity.service.ts

31 lines
1.2 KiB
TypeScript
Raw Normal View History

import { Injectable } from '@nestjs/common';
import { LearningActivityRepository } from './learning-activity.repository';
@Injectable()
export class LearningActivityService {
constructor(private readonly repository: LearningActivityRepository) {}
async getHeatmap(userId: string) {
const activities = await this.repository.findAll(userId);
const heatmap: Record<string, number> = {};
for (const a of activities) {
const dateStr = a.activityDate instanceof Date
? a.activityDate.toISOString().split('T')[0]
: String(a.activityDate).split('T')[0];
heatmap[dateStr] = a.durationSeconds;
}
return heatmap;
}
async getSummary(userId: string) {
const activities = await this.repository.findAll(userId);
const totalMinutes = Math.round(
activities.reduce((s, a) => s + a.durationSeconds, 0) / 60,
);
const totalCards = activities.reduce((s, a) => s + a.reviewCount, 0);
const activeDays = activities.filter((a) => a.durationSeconds > 0).length;
const dailyAverage = activeDays > 0 ? Math.round(totalMinutes / activeDays) : 0;
return { totalMinutes, totalCardsReviewed: totalCards, activeDays, dailyAverage };
}
}