feat: teacher get, post en delete route

This commit is contained in:
Gabriellvl 2025-03-07 20:05:16 +01:00
parent b8db32161f
commit 6b87722469
6 changed files with 166 additions and 24 deletions

View file

@ -0,0 +1,79 @@
import { Request, Response } from 'express';
import {
createTeacher, deleteTeacher,
fetchAllTeachers, fetchTeacherByUsername
} from '../services/teachers.js';
import {TeacherDTO} from "../interfaces/teacher";
export async function getTeacherHandler(req: Request, res: Response): Promise<void> {
try {
const full = req.query.full === 'true';
const username = req.query.username as string;
if (username){
const teacher = await fetchTeacherByUsername(username);
if (!teacher){
res.status(404).json({ error: `Teacher with username '${username}' not found.` });
return;
}
res.json(teacher);
return;
}
let teachers: TeacherDTO[] | string[] = await fetchAllTeachers();
if (!full)
teachers = teachers.map((teacher) => teacher.username)
res.json(teachers);
} catch (error) {
console.error("❌ Error fetching teachers:", error);
res.status(500).json({ error: "Internal server error" });
}
}
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' });
}
}
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' });
}
}