feat: teacher get, post en delete route
This commit is contained in:
		
							parent
							
								
									b8db32161f
								
							
						
					
					
						commit
						6b87722469
					
				
					 6 changed files with 166 additions and 24 deletions
				
			
		
							
								
								
									
										79
									
								
								backend/src/controllers/teachers.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								backend/src/controllers/teachers.ts
									
										
									
									
									
										Normal 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' });
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in a new issue