exams setup

This commit is contained in:
toni
2026-03-19 23:13:00 +01:00
parent d8c018e3ef
commit a3b753a5f7
6 changed files with 168 additions and 12 deletions
+57
View File
@@ -0,0 +1,57 @@
import type { Request } from "express";
import type {
ExamCreationDto,
ExamDto,
ExamWithMembersDto,
MemberExamCreationDto,
MemberExamDto,
} from "../dtos/examDto.js";
import { inject } from "../infrastructure/di/index.js";
import { Injectable } from "../infrastructure/di/injectable-decorator.js";
import { DatabaseService } from "./db/prisma.js";
@Injectable()
export class ExamsService {
private readonly db = inject(DatabaseService);
public async createExam(
newExam: ExamCreationDto,
request: Request,
): Promise<ExamDto> {
return await this.db.doRequest(
async prisma =>
prisma.exam.create({
data: newExam,
}),
request,
);
}
public async getLatest(
request: Request,
): Promise<ExamWithMembersDto | null> {
return await this.db.doRequest(
async prisma =>
prisma.exam.findFirst({
orderBy: { date: "desc" },
include: { memberExams: true },
}),
request,
);
}
public async register(
creationDto: MemberExamCreationDto,
request: Request,
): Promise<MemberExamDto> {
return await this.db.doRequest(
async prisma =>
prisma.memberExam.create({
data: {
examId: creationDto.examId,
memberId: creationDto.memberId,
targetGrade: creationDto.targetGrade,
},
}),
request,
);
}
}