feat: teacher invitation databank api verbinding aangemaakt, bug in data repo waar teacher invitation repo niet juist werd teruggegeven gefixt

This commit is contained in:
Adriaan Jacquet 2025-03-08 20:16:57 +01:00
parent cfd0cce2df
commit baf43e91de
6 changed files with 92 additions and 11 deletions

View file

@ -1,5 +1,5 @@
import { Request, Response } from 'express';
import { getAllClasses, getClass, getClassStudents } from '../services/class';
import { getAllClasses, getClass, getClassStudents, getClassTeacherInvitations } from '../services/class';
import { ClassDTO } from '../interfaces/classes';
export async function getAllClassesHandler(
@ -53,4 +53,18 @@ export async function getClassStudentsHandler(
res.json({
students: students,
});
}
export async function getTeacherInvitationsHandler(
req: Request,
res: Response,
): Promise<void> {
const classId = req.params.id;
const full = req.query.full === "true"; // TODO: not implemented yet
const invitations = await getClassTeacherInvitations(classId, full);
res.json({
invitations: invitations,
});
}

View file

@ -80,7 +80,7 @@ export const getClassJoinRequestRepository = repositoryGetter<
export const getTeacherInvitationRepository = repositoryGetter<
TeacherInvitation,
TeacherInvitationRepository
>(TeacherInvitationRepository);
>(TeacherInvitation);
/* Assignments */
export const getAssignmentRepository = repositoryGetter<

View file

@ -0,0 +1,25 @@
import { TeacherInvitation } from "../entities/classes/teacher-invitation.entity";
import { ClassDTO, mapToClassDTO } from "./classes";
import { mapToTeacherDTO, TeacherDTO } from "./teacher";
export interface TeacherInvitationDTO {
sender: string | TeacherDTO,
receiver: string | TeacherDTO,
class: string | ClassDTO,
}
export function mapToTeacherInvitationDTO(invitation: TeacherInvitation): TeacherInvitationDTO {
return {
sender: mapToTeacherDTO(invitation.sender),
receiver: mapToTeacherDTO(invitation.receiver),
class: mapToClassDTO(invitation.class),
};
}
export function mapToTeacherInvitationDTOIds(invitation: TeacherInvitation): TeacherInvitationDTO {
return {
sender: invitation.sender.username,
receiver: invitation.receiver.username,
class: invitation.class.classId,
};
}

View file

@ -0,0 +1,23 @@
import { Teacher } from "../entities/users/teacher.entity";
export interface TeacherDTO {
id: string;
username: string;
firstName: string;
lastName: string;
endpoints?: {
classes: string;
questions: string;
invitations: string;
groups: string;
};
}
export function mapToTeacherDTO(teacher: Teacher): TeacherDTO {
return {
id: teacher.username,
username: teacher.username,
firstName: teacher.firstName,
lastName: teacher.lastName,
};
}

View file

@ -1,5 +1,5 @@
import express from 'express'
import { getAllClassesHandler, getClassHandler, getClassStudentsHandler } from '../controllers/classes';
import { getAllClassesHandler, getClassHandler, getClassStudentsHandler, getTeacherInvitationsHandler } from '../controllers/classes';
import assignmentRouter from './assignment.js';
const router = express.Router();
@ -10,13 +10,7 @@ router.get('/', getAllClassesHandler);
// information about an class with id 'id'
router.get('/:id', getClassHandler);
router.get('/:id/invitations', (req, res) => {
res.json({
invitations: [
'0'
],
});
})
router.get('/:id/teacher-invitations', getTeacherInvitationsHandler);
router.get('/:id/students', getClassStudentsHandler);

View file

@ -1,7 +1,8 @@
import { getClassRepository } from "../data/repositories";
import { getClassRepository, getTeacherInvitationRepository } from "../data/repositories";
import { Class } from "../entities/classes/class.entity";
import { ClassDTO, mapToClassDTO } from "../interfaces/classes";
import { mapToStudentDTO, StudentDTO } from "../interfaces/students";
import { mapToTeacherInvitationDTO, mapToTeacherInvitationDTOIds, TeacherInvitationDTO } from "../interfaces/teacher-invitation";
export async function getAllClasses(full: boolean): Promise<ClassDTO[] | string[]> {
const classRepository = getClassRepository();
@ -41,4 +42,28 @@ export async function getClassStudents(classId: string, full: boolean): Promise<
} else {
return cls.students.map((student) => student.username);
}
}
export async function getClassTeacherInvitations(classId: string, full: boolean): Promise<TeacherInvitationDTO[]> {
const classRepository = getClassRepository();
const cls = await classRepository.findById(classId);
if (!cls) {
return [];
}
const teacherInvitationRepository = getTeacherInvitationRepository();
const invitations = await teacherInvitationRepository.findAllInvitationsForClass(cls);
console.log(invitations);
if (!invitations) {
return [];
}
if (full) {
return invitations.map(mapToTeacherInvitationDTO);
}
return invitations.map(mapToTeacherInvitationDTOIds);
}