From 2b3f6b5e7a91607f8c3733399c583e10fb3cd030 Mon Sep 17 00:00:00 2001 From: Gerald Schmittinger Date: Sat, 19 Apr 2025 11:27:51 +0200 Subject: [PATCH] feat(backend): '/auth/hello' endpoint toegevoegd --- backend/dwengo | 0 backend/src/controllers/auth.ts | 23 +++++++++++++++++++++++ backend/src/controllers/students.ts | 4 ++-- backend/src/routes/auth.ts | 4 +++- backend/src/services/students.ts | 8 ++++++-- backend/src/services/teachers.ts | 8 ++++++-- 6 files changed, 40 insertions(+), 7 deletions(-) create mode 100644 backend/dwengo diff --git a/backend/dwengo b/backend/dwengo new file mode 100644 index 00000000..e69de29b diff --git a/backend/src/controllers/auth.ts b/backend/src/controllers/auth.ts index b87eaf7b..f44784ba 100644 --- a/backend/src/controllers/auth.ts +++ b/backend/src/controllers/auth.ts @@ -1,4 +1,9 @@ +import { UnauthorizedException } from '../exceptions/unauthorized-exception.js'; +import { AuthenticatedRequest } from '../middleware/auth/authenticated-request.js'; +import { createOrUpdateStudent } from '../services/students.js'; +import { createOrUpdateTeacher } from '../services/teachers.js'; import { envVars, getEnvVar } from '../util/envVars.js'; +import { Response } from "express"; interface FrontendIdpConfig { authority: string; @@ -31,3 +36,21 @@ export function getFrontendAuthConfig(): FrontendAuthConfig { }, }; } + +export async function postHelloHandler(req: AuthenticatedRequest, _res: Response): Promise { + const auth = req.auth; + if (!auth) { + throw new UnauthorizedException("Cannot say hello when not authenticated."); + } + const userData = { + id: auth.username, + username: auth.username, + firstName: auth.firstName ?? '', + lastName: auth.lastName ?? '' + }; + if (auth.accountType === "student") { + await createOrUpdateStudent({ ...userData }, { preventOverwrite: false }); + } else { + await createOrUpdateTeacher({ ...userData }, { preventOverwrite: false }); + } +} diff --git a/backend/src/controllers/students.ts b/backend/src/controllers/students.ts index 51488a2a..48120db6 100644 --- a/backend/src/controllers/students.ts +++ b/backend/src/controllers/students.ts @@ -1,7 +1,7 @@ import { Request, Response } from 'express'; import { createClassJoinRequest, - createStudent, + createOrUpdateStudent, deleteClassJoinRequest, deleteStudent, getAllStudents, @@ -42,7 +42,7 @@ export async function createStudentHandler(req: Request, res: Response): Promise const userData = req.body as StudentDTO; - const student = await createStudent(userData); + const student = await createOrUpdateStudent(userData); res.json({ student }); } diff --git a/backend/src/routes/auth.ts b/backend/src/routes/auth.ts index 4a1f27d2..6f153836 100644 --- a/backend/src/routes/auth.ts +++ b/backend/src/routes/auth.ts @@ -1,5 +1,5 @@ import express from 'express'; -import { getFrontendAuthConfig } from '../controllers/auth.js'; +import { getFrontendAuthConfig, postHelloHandler } from '../controllers/auth.js'; import { authenticatedOnly, studentsOnly, teachersOnly } from '../middleware/auth/auth.js'; const router = express.Router(); @@ -23,4 +23,6 @@ router.get('/testTeachersOnly', teachersOnly, (_req, res) => { res.json({ message: 'If you see this, you should be a teacher!' }); }); +router.post('/hello', authenticatedOnly, postHelloHandler); + export default router; diff --git a/backend/src/services/students.ts b/backend/src/services/students.ts index b1467886..c097b7a1 100644 --- a/backend/src/services/students.ts +++ b/backend/src/services/students.ts @@ -53,14 +53,18 @@ export async function getStudent(username: string): Promise { return mapToStudentDTO(user); } -export async function createStudent(userData: StudentDTO): Promise { +export async function createOrUpdateStudent(userData: StudentDTO, options?: { preventOverwrite: boolean}): Promise { const studentRepository = getStudentRepository(); const newStudent = mapToStudent(userData); - await studentRepository.save(newStudent, { preventOverwrite: true }); + await studentRepository.save(newStudent, { preventOverwrite: options?.preventOverwrite ?? true }); return userData; } +export async function createStudent(userData: StudentDTO): Promise { + return createOrUpdateStudent(userData, { preventOverwrite: true }); +} + export async function deleteStudent(username: string): Promise { const studentRepository = getStudentRepository(); diff --git a/backend/src/services/teachers.ts b/backend/src/services/teachers.ts index 982b657b..b8704fc3 100644 --- a/backend/src/services/teachers.ts +++ b/backend/src/services/teachers.ts @@ -57,14 +57,18 @@ export async function getTeacher(username: string): Promise { return mapToTeacherDTO(user); } -export async function createTeacher(userData: TeacherDTO): Promise { +export async function createOrUpdateTeacher(userData: TeacherDTO, options?: { preventOverwrite?: boolean }): Promise { const teacherRepository: TeacherRepository = getTeacherRepository(); const newTeacher = mapToTeacher(userData); - await teacherRepository.save(newTeacher, { preventOverwrite: true }); + await teacherRepository.save(newTeacher, { preventOverwrite: options?.preventOverwrite ?? true }); return mapToTeacherDTO(newTeacher); } +export async function createTeacher(userData: TeacherDTO): Promise { + return await createOrUpdateTeacher(userData, { preventOverwrite: true }); +} + export async function deleteTeacher(username: string): Promise { const teacherRepository: TeacherRepository = getTeacherRepository();