import { getAssignmentRepository, getClassRepository, getGroupRepository, getSubmissionRepository } from '../data/repositories.js'; import { mapToAssignment, mapToAssignmentDTO, mapToAssignmentDTOId } from '../interfaces/assignment.js'; import { mapToSubmissionDTO, mapToSubmissionDTOId } from '../interfaces/submission.js'; import { AssignmentDTO } from '@dwengo-1/common/interfaces/assignment'; import { SubmissionDTO, SubmissionDTOId } from '@dwengo-1/common/interfaces/submission'; import { getLogger } from '../logging/initalize.js'; export async function getAllAssignments(classid: string, full: boolean): Promise { const classRepository = getClassRepository(); const cls = await classRepository.findById(classid); if (!cls) { return []; } const assignmentRepository = getAssignmentRepository(); const assignments = await assignmentRepository.findAllAssignmentsInClass(cls); if (full) { return assignments.map(mapToAssignmentDTO); } return assignments.map(mapToAssignmentDTOId); } export async function createAssignment(classid: string, assignmentData: AssignmentDTO): Promise { const classRepository = getClassRepository(); const cls = await classRepository.findById(classid); if (!cls) { return null; } const assignment = mapToAssignment(assignmentData, cls); const assignmentRepository = getAssignmentRepository(); try { const newAssignment = assignmentRepository.create(assignment); await assignmentRepository.save(newAssignment); return mapToAssignmentDTO(newAssignment); } catch (e) { getLogger().error(e); return null; } } export async function getAssignment(classid: string, id: number): Promise { const classRepository = getClassRepository(); const cls = await classRepository.findById(classid); if (!cls) { return null; } const assignmentRepository = getAssignmentRepository(); const assignment = await assignmentRepository.findByClassAndId(cls, id); if (!assignment) { return null; } return mapToAssignmentDTO(assignment); } export async function getAssignmentsSubmissions( classid: string, assignmentNumber: number, full: boolean ): Promise { const classRepository = getClassRepository(); const cls = await classRepository.findById(classid); if (!cls) { return []; } const assignmentRepository = getAssignmentRepository(); const assignment = await assignmentRepository.findByClassAndId(cls, assignmentNumber); if (!assignment) { return []; } const groupRepository = getGroupRepository(); const groups = await groupRepository.findAllGroupsForAssignment(assignment); const submissionRepository = getSubmissionRepository(); const submissions = (await Promise.all(groups.map(async (group) => submissionRepository.findAllSubmissionsForGroup(group)))).flat(); if (full) { return submissions.map(mapToSubmissionDTO); } return submissions.map(mapToSubmissionDTOId); }