From c14d6c53da11d3d48d9f9fbe3a038d74f5af71ea Mon Sep 17 00:00:00 2001 From: Tibo De Peuter Date: Sat, 22 Mar 2025 17:16:33 +0100 Subject: [PATCH] refactor(backend): logger i.p.v. console --- backend/src/controllers/classes.ts | 3 ++- backend/src/controllers/students.ts | 3 ++- backend/src/controllers/teachers.ts | 7 ++++--- backend/src/controllers/users.ts | 11 ++++++----- backend/src/interfaces/assignment.ts | 3 ++- backend/src/services/groups.ts | 8 ++++---- backend/src/services/learning-objects.ts | 7 ++++--- backend/src/services/students.ts | 5 +++-- backend/src/services/teachers.ts | 5 +++-- 9 files changed, 30 insertions(+), 22 deletions(-) diff --git a/backend/src/controllers/classes.ts b/backend/src/controllers/classes.ts index ca2f5698..fbbd6737 100644 --- a/backend/src/controllers/classes.ts +++ b/backend/src/controllers/classes.ts @@ -1,6 +1,7 @@ import { Request, Response } from 'express'; import { createClass, getAllClasses, getClass, getClassStudents, getClassStudentsIds, getClassTeacherInvitations } from '../services/class.js'; import { ClassDTO } from '../interfaces/class.js'; +import { getLogger } from '../logging/initalize.js'; export async function getAllClassesHandler(req: Request, res: Response): Promise { const full = req.query.full === 'true'; @@ -49,7 +50,7 @@ export async function getClassHandler(req: Request, res: Response): Promise { const full = req.query.full === 'true'; @@ -100,7 +101,7 @@ export async function getTeacherClassHandler(req: Request, res: Response): Promi res.status(201).json(classes); } catch (error) { - console.error('Error fetching classes by teacher:', error); + getLogger().error('Error fetching classes by teacher:', error); res.status(500).json({ error: 'Internal server error' }); } } @@ -119,7 +120,7 @@ export async function getTeacherStudentHandler(req: Request, res: Response): Pro res.status(201).json(students); } catch (error) { - console.error('Error fetching students by teacher:', error); + getLogger().error('Error fetching students by teacher:', error); res.status(500).json({ error: 'Internal server error' }); } } @@ -138,7 +139,7 @@ export async function getTeacherQuestionHandler(req: Request, res: Response): Pr res.status(201).json(questions); } catch (error) { - console.error('Error fetching questions by teacher:', error); + getLogger().error('Error fetching questions by teacher:', error); res.status(500).json({ error: 'Internal server error' }); } } diff --git a/backend/src/controllers/users.ts b/backend/src/controllers/users.ts index 850c6549..b9a6be8e 100644 --- a/backend/src/controllers/users.ts +++ b/backend/src/controllers/users.ts @@ -2,6 +2,7 @@ import { Request, Response } from 'express'; import { UserService } from '../services/users.js'; import { UserDTO } from '../interfaces/user.js'; import { User } from '../entities/users/user.entity.js'; +import { getLogger } from '../logging/initalize.js'; export async function getAllUsersHandler(req: Request, res: Response, service: UserService): Promise { try { @@ -16,7 +17,7 @@ export async function getAllUsersHandler(req: Request, res: Resp res.status(201).json(users); } catch (error) { - console.error('❌ Error fetching users:', error); + getLogger().error('❌ Error fetching users:', error); res.status(500).json({ error: 'Internal server error' }); } } @@ -41,14 +42,14 @@ export async function getUserHandler(req: Request, res: Response res.status(201).json(user); } catch (error) { - console.error('❌ Error fetching users:', error); + getLogger().error('❌ Error fetching users:', error); res.status(500).json({ error: 'Internal server error' }); } } export async function createUserHandler(req: Request, res: Response, service: UserService, UserClass: new () => T) { try { - console.log('req', req); + getLogger().debug({ req: req }); const userData = req.body as UserDTO; if (!userData.username || !userData.firstName || !userData.lastName) { @@ -61,7 +62,7 @@ export async function createUserHandler(req: Request, res: Respo const newUser = await service.createUser(userData, UserClass); res.status(201).json(newUser); } catch (error) { - console.error('❌ Error creating user:', error); + getLogger().error('❌ Error creating user:', error); res.status(500).json({ error: 'Internal server error' }); } } @@ -85,7 +86,7 @@ export async function deleteUserHandler(req: Request, res: Respo res.status(200).json(deletedUser); } catch (error) { - console.error('❌ Error deleting user:', error); + getLogger().error('❌ Error deleting user:', error); res.status(500).json({ error: 'Internal server error' }); } } diff --git a/backend/src/interfaces/assignment.ts b/backend/src/interfaces/assignment.ts index 8f6120b6..45023399 100644 --- a/backend/src/interfaces/assignment.ts +++ b/backend/src/interfaces/assignment.ts @@ -3,6 +3,7 @@ import { Assignment } from '../entities/assignments/assignment.entity.js'; import { Class } from '../entities/classes/class.entity.js'; import { languageMap } from '../entities/content/language.js'; import { GroupDTO, mapToGroupDTO } from './group.js'; +import { getLogger } from '../logging/initalize.js'; export interface AssignmentDTO { id: number; @@ -46,7 +47,7 @@ export function mapToAssignment(assignmentData: AssignmentDTO, cls: Class): Assi assignment.learningPathLanguage = languageMap[assignmentData.language] || FALLBACK_LANG; assignment.within = cls; - console.log(assignment); + getLogger().debug(assignment); return assignment; } diff --git a/backend/src/services/groups.ts b/backend/src/services/groups.ts index 91091703..329d230d 100644 --- a/backend/src/services/groups.ts +++ b/backend/src/services/groups.ts @@ -9,6 +9,7 @@ import { import { Group } from '../entities/assignments/group.entity.js'; import { GroupDTO, mapToGroupDTO, mapToGroupDTOId } from '../interfaces/group.js'; import { mapToSubmissionDTO, SubmissionDTO } from '../interfaces/submission.js'; +import { getLogger } from '../logging/initalize.js'; export async function getGroup(classId: string, assignmentNumber: number, groupNumber: number, full: boolean): Promise { const classRepository = getClassRepository(); @@ -45,7 +46,7 @@ export async function createGroup(groupData: GroupDTO, classid: string, assignme const memberUsernames = (groupData.members as string[]) || []; // TODO check if groupdata.members is a list const members = (await Promise.all([...memberUsernames].map((id) => studentRepository.findByUsername(id)))).filter((student) => student != null); - console.log(members); + getLogger().debug(members); const classRepository = getClassRepository(); const cls = await classRepository.findById(classid); @@ -71,7 +72,7 @@ export async function createGroup(groupData: GroupDTO, classid: string, assignme return newGroup; } catch (e) { - console.log(e); + getLogger().error(e); return null; } } @@ -95,8 +96,7 @@ export async function getAllGroups(classId: string, assignmentNumber: number, fu const groups = await groupRepository.findAllGroupsForAssignment(assignment); if (full) { - console.log('full'); - console.log(groups); + getLogger().debug({ full: full, groups: groups }); return groups.map(mapToGroupDTO); } diff --git a/backend/src/services/learning-objects.ts b/backend/src/services/learning-objects.ts index fb579471..87856bc9 100644 --- a/backend/src/services/learning-objects.ts +++ b/backend/src/services/learning-objects.ts @@ -1,6 +1,7 @@ import { DWENGO_API_BASE } from '../config.js'; import { fetchWithLogging } from '../util/api-helper.js'; import { FilteredLearningObject, LearningObjectMetadata, LearningObjectNode, LearningPathResponse } from '../interfaces/learning-content.js'; +import { getLogger } from '../logging/initalize.js'; function filterData(data: LearningObjectMetadata, htmlUrl: string): FilteredLearningObject { return { @@ -37,7 +38,7 @@ export async function getLearningObjectById(hruid: string, language: string): Pr ); if (!metadata) { - console.error(`⚠️ WARNING: Learning object "${hruid}" not found.`); + getLogger().error(`⚠️ WARNING: Learning object "${hruid}" not found.`); return null; } @@ -53,7 +54,7 @@ async function fetchLearningObjects(hruid: string, full: boolean, language: stri const learningPathResponse: LearningPathResponse = await fetchLearningPaths([hruid], language, `Learning path for HRUID "${hruid}"`); if (!learningPathResponse.success || !learningPathResponse.data?.length) { - console.error(`⚠️ WARNING: Learning path "${hruid}" exists but contains no learning objects.`); + getLogger().error(`⚠️ WARNING: Learning path "${hruid}" exists but contains no learning objects.`); return []; } @@ -67,7 +68,7 @@ async function fetchLearningObjects(hruid: string, full: boolean, language: stri objects.filter((obj): obj is FilteredLearningObject => obj !== null) ); } catch (error) { - console.error('❌ Error fetching learning objects:', error); + getLogger().error('❌ Error fetching learning objects:', error); return []; } } diff --git a/backend/src/services/students.ts b/backend/src/services/students.ts index 5099a18d..98fdfe0a 100644 --- a/backend/src/services/students.ts +++ b/backend/src/services/students.ts @@ -8,6 +8,7 @@ import { mapToStudent, mapToStudentDTO, StudentDTO } from '../interfaces/student import { mapToSubmissionDTO, SubmissionDTO } from '../interfaces/submission.js'; import { getAllAssignments } from './assignments.js'; import { UserService } from './users.js'; +import { getLogger } from '../logging/initalize.js'; export async function getAllStudents(): Promise { const studentRepository = getStudentRepository(); @@ -35,7 +36,7 @@ export async function createStudent(userData: StudentDTO): Promise { const teacherRepository = getTeacherRepository(); @@ -40,7 +41,7 @@ export async function createTeacher(userData: TeacherDTO): Promise