import { Injectable, NotFoundException } from '@nestjs/common'; import { LearningSessionRepository } from './learning-session.repository'; @Injectable() export class LearningSessionService { constructor(private readonly repository: LearningSessionRepository) {} async start(userId: string, dto: any) { return this.repository.create(userId, dto); } async end(id: string) { const session = await this.repository.end(id); if (!session) throw new NotFoundException('会话不存在'); return session; } async findByUserId(userId: string, opts: { page?: number; limit?: number; status?: string; sort?: string }) { return this.repository.findByUserId(userId, opts); } /** Upsert a session from a reading event (M8 aggregation). */ async upsertFromReadingEvent(data: { userId: string; clientSessionId: string; materialId: string; readingTargetType: string; knowledgeBaseId?: string | null; eventType: string; activeSecondsDelta: number; position?: any; timestampMs: number; startedAt: Date; }) { return this.repository.upsertByClientSession(data); } }