96 lines
3.1 KiB
TypeScript
96 lines
3.1 KiB
TypeScript
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<AssignmentDTO[]> {
|
|
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<AssignmentDTO | null> {
|
|
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<AssignmentDTO | null> {
|
|
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<SubmissionDTO[] | SubmissionDTOId[]> {
|
|
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);
|
|
}
|