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

38 lines
1.1 KiB
TypeScript
Raw Normal View History

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);
}
}