Merge remote-tracking branch 'origin/dev' into feat/indieningen-kunnen-posten-en-bekijken-#194

# Conflicts:
#	backend/tests/setup-tests.ts
This commit is contained in:
Gerald Schmittinger 2025-04-16 16:31:18 +02:00
commit dd2cdf3fe9
46 changed files with 1670 additions and 123 deletions

View file

@ -6,7 +6,7 @@ import { Language } from '@dwengo-1/common/util/language';
import { BadRequestException } from '../exceptions/bad-request-exception.js';
import { NotFoundException } from '../exceptions/not-found-exception.js';
import {Group} from "../entities/assignments/group.entity";
import {getGroupRepository} from "../data/repositories";
import {getAssignmentRepository, getGroupRepository} from "../data/repositories";
/**
* Fetch learning paths based on query parameters.
@ -27,15 +27,14 @@ export async function getLearningPaths(req: Request, res: Response): Promise<voi
if (!assignmentNo || !classId) {
throw new BadRequestException('If forGroupNo is specified, assignmentNo and classId must also be specified.');
}
forGroup = await getGroupRepository().findOne({
assignment: {
id: parseInt(assignmentNo),
within: {
classId
}
},
groupNumber: parseInt(forGroupNo)
}) ?? undefined;
const assignment = await getAssignmentRepository().findByClassIdAndAssignmentId(
classId, parseInt(assignmentNo)
);
if (assignment) {
forGroup = await getGroupRepository().findByAssignmentAndGroupNumber(
assignment, parseInt(forGroupNo)
) ?? undefined;
}
}
let hruidList;

View file

@ -4,7 +4,7 @@ import {
deleteSubmission,
getAllSubmissions,
getSubmission,
getSubmissionsForLearningObjectAndAssignment,
getSubmissionsForLearningObjectAndAssignment, getSubmissionsForLearningObjectAndGroup,
} from '../services/submissions.js';
import { SubmissionDTO } from '@dwengo-1/common/interfaces/submission';
import { Language, languageMap } from '@dwengo-1/common/util/language';
@ -17,13 +17,25 @@ export async function getSubmissionsHandler(req: Request, res: Response): Promis
const lang = languageMap[req.query.language as string] || Language.Dutch;
const version = parseInt(req.query.version as string) ?? 1;
const submissions = await getSubmissionsForLearningObjectAndAssignment(
loHruid,
lang,
version,
req.query.classId as string,
parseInt(req.query.assignmentId as string)
);
let submissions: SubmissionDTO[]
if (req.query.groupId) {
submissions = await getSubmissionsForLearningObjectAndGroup(
loHruid,
lang,
version,
req.query.classId as string,
parseInt(req.query.assignmentId as string),
parseInt(req.query.groupId as string)
);
} else {
submissions = await getSubmissionsForLearningObjectAndAssignment(
loHruid,
lang,
version,
req.query.classId as string,
parseInt(req.query.assignmentId as string)
)
}
res.json(submissions);
}

View file

@ -0,0 +1,66 @@
import { Request, Response } from 'express';
import { requireFields } from './error-helper';
import { createInvitation, deleteInvitation, getAllInvitations, getInvitation, updateInvitation } from '../services/teacher-invitations';
import { TeacherInvitationData } from '@dwengo-1/common/interfaces/teacher-invitation';
export async function getAllInvitationsHandler(req: Request, res: Response): Promise<void> {
const username = req.params.username;
const by = req.query.sent === 'true';
requireFields({ username });
const invitations = await getAllInvitations(username, by);
res.json({ invitations });
}
export async function getInvitationHandler(req: Request, res: Response): Promise<void> {
const sender = req.params.sender;
const receiver = req.params.receiver;
const classId = req.params.classId;
requireFields({ sender, receiver, classId });
const invitation = await getInvitation(sender, receiver, classId);
res.json({ invitation });
}
export async function createInvitationHandler(req: Request, res: Response): Promise<void> {
const sender = req.body.sender;
const receiver = req.body.receiver;
const classId = req.body.class;
requireFields({ sender, receiver, classId });
const data = req.body as TeacherInvitationData;
const invitation = await createInvitation(data);
res.json({ invitation });
}
export async function updateInvitationHandler(req: Request, res: Response): Promise<void> {
const sender = req.body.sender;
const receiver = req.body.receiver;
const classId = req.body.class;
req.body.accepted = req.body.accepted !== 'false';
requireFields({ sender, receiver, classId });
const data = req.body as TeacherInvitationData;
const invitation = await updateInvitation(data);
res.json({ invitation });
}
export async function deleteInvitationHandler(req: Request, res: Response): Promise<void> {
const sender = req.params.sender;
const receiver = req.params.receiver;
const classId = req.params.classId;
requireFields({ sender, receiver, classId });
const data: TeacherInvitationData = {
sender,
receiver,
class: classId,
};
const invitation = await deleteInvitation(data);
res.json({ invitation });
}