fix: integratie user + errors gefixt zodat het runt + format

This commit is contained in:
Gabriellvl 2025-03-09 23:59:31 +01:00
parent 6c4ea0eefb
commit 1b096b411b
55 changed files with 858 additions and 594 deletions

View file

@ -1,92 +1,53 @@
import { Request, Response } from 'express';
import { TeacherUserService, TeacherService } from '../services/teachers.js';
import { ClassDTO } from '../interfaces/class.js';
import { StudentDTO } from '../interfaces/student.js';
import { QuestionDTO, QuestionId } from '../interfaces/question.js';
import {
createTeacher,
deleteTeacher,
getTeacherByUsername,
getClassesByTeacher,
getClassIdsByTeacher,
getAllTeachers,
getAllTeachersIds, getStudentsByTeacher, getStudentIdsByTeacher, getQuestionsByTeacher, getQuestionIdsByTeacher
} from '../services/teachers.js';
import {TeacherDTO} from "../interfaces/teacher";
import {ClassDTO} from "../interfaces/class";
import {StudentDTO} from "../interfaces/student";
import {QuestionDTO, QuestionId} from "../interfaces/question";
createUserHandler,
deleteUserHandler,
getAllUsersHandler,
getUserHandler,
} from './users.js';
import { Teacher } from '../entities/users/teacher.entity.js';
export async function getTeacherHandler(req: Request, res: Response): Promise<void> {
try {
const full = req.query.full === 'true';
const username = req.query.username as string;
export async function getAllTeachersHandler(
req: Request,
res: Response
): Promise<void> {
await getAllUsersHandler<Teacher>(req, res, new TeacherUserService());
}
if (username){
const teacher = await getTeacherByUsername(username);
if (!teacher){
res.status(404).json({ error: `Teacher with username '${username}' not found.` });
return;
}
res.json(teacher);
return;
}
let teachers: TeacherDTO[] | string[];
if (full) teachers = await getAllTeachers();
else teachers = await getAllTeachersIds();
res.json(teachers);
} catch (error) {
console.error("❌ Error fetching teachers:", error);
res.status(500).json({ error: "Internal server error" });
}
export async function getTeacherHandler(
req: Request,
res: Response
): Promise<void> {
await getUserHandler<Teacher>(req, res, new TeacherUserService());
}
export async function createTeacherHandler(
req: Request,
res: Response
): Promise<void> {
try {
const teacherData = req.body as TeacherDTO;
if (!teacherData.username || !teacherData.firstName || !teacherData.lastName) {
res.status(400).json({ error: 'Missing required fields: username, firstName, lastName' });
return;
}
const newTeacher = await createTeacher(teacherData);
res.status(201).json(newTeacher);
} catch (error) {
console.error('Error creating teacher:', error);
res.status(500).json({ error: 'Internal server error' });
}
await createUserHandler<Teacher>(
req,
res,
new TeacherUserService(),
Teacher
);
}
export async function deleteTeacherHandler(
req: Request,
res: Response
): Promise<void> {
try {
const username = req.params.username as string;
if (!username) {
res.status(400).json({ error: 'Missing required field: username' });
return;
}
const deletedTeacher = await deleteTeacher(username);
if (!deletedTeacher) {
res.status(400).json({ error: `Did not find teacher with username ${username}` });
return;
}
res.status(201).json(deletedTeacher);
} catch (error) {
console.error('Error deleting teacher:', error);
res.status(500).json({ error: 'Internal server error' });
}
await deleteUserHandler<Teacher>(req, res, new TeacherUserService());
}
export async function getTeacherClassHandler(req: Request, res: Response): Promise<void> {
export async function getTeacherClassHandler(
req: Request,
res: Response
): Promise<void> {
try {
const username = req.params.username as string;
const full = req.query.full === 'true';
@ -96,10 +57,11 @@ export async function getTeacherClassHandler(req: Request, res: Response): Promi
return;
}
let classes: ClassDTO[] | string[];
const teacherService = new TeacherService();
if (full) classes = await getClassesByTeacher(username);
else classes = await getClassIdsByTeacher(username);
const classes: ClassDTO[] | string[] = full
? await teacherService.getClassesByTeacher(username)
: await teacherService.getClassIdsByTeacher(username);
res.status(201).json(classes);
} catch (error) {
@ -108,7 +70,10 @@ export async function getTeacherClassHandler(req: Request, res: Response): Promi
}
}
export async function getTeacherStudentHandler(req: Request, res: Response): Promise<void> {
export async function getTeacherStudentHandler(
req: Request,
res: Response
): Promise<void> {
try {
const username = req.params.username as string;
const full = req.query.full === 'true';
@ -118,10 +83,11 @@ export async function getTeacherStudentHandler(req: Request, res: Response): Pro
return;
}
let students: StudentDTO[] | string[];
const teacherService = new TeacherService();
if (full) students = await getStudentsByTeacher(username);
else students = await getStudentIdsByTeacher(username);
const students: StudentDTO[] | string[] = full
? await teacherService.getStudentsByTeacher(username)
: await teacherService.getStudentIdsByTeacher(username);
res.status(201).json(students);
} catch (error) {
@ -130,7 +96,10 @@ export async function getTeacherStudentHandler(req: Request, res: Response): Pro
}
}
export async function getTeacherQuestionHandler(req: Request, res: Response): Promise<void> {
export async function getTeacherQuestionHandler(
req: Request,
res: Response
): Promise<void> {
try {
const username = req.params.username as string;
const full = req.query.full === 'true';
@ -140,10 +109,11 @@ export async function getTeacherQuestionHandler(req: Request, res: Response): Pr
return;
}
let questions: QuestionDTO[] | QuestionId[];
const teacherService = new TeacherService();
if (full) questions = await getQuestionsByTeacher(username);
else questions = await getQuestionIdsByTeacher(username);
const questions: QuestionDTO[] | QuestionId[] = full
? await teacherService.getQuestionsByTeacher(username)
: await teacherService.getQuestionIdsByTeacher(username);
res.status(201).json(questions);
} catch (error) {
@ -151,5 +121,3 @@ export async function getTeacherQuestionHandler(req: Request, res: Response): Pr
res.status(500).json({ error: 'Internal server error' });
}
}