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 { const full = req.query.full === 'true'; const users: UserDTO[] | string[] = full ? await service.getAllUsers() : await service.getAllUserIds(); if (!users) { res.status(404).json({ error: `Users not found.` }); return; } res.status(201).json(users); } catch (error) { getLogger().error('❌ Error fetching users:', error); res.status(500).json({ error: 'Internal server error' }); } } export async function getUserHandler(req: Request, res: Response, service: UserService): Promise { try { const username = req.params.username; if (!username) { res.status(400).json({ error: 'Missing required field: username' }); return; } const user = await service.getUserByUsername(username); if (!user) { res.status(404).json({ error: `User with username '${username}' not found.`, }); return; } res.status(201).json(user); } catch (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): Promise { try { getLogger().debug({ req: req }); const userData = req.body as UserDTO; if (!userData.username || !userData.firstName || !userData.lastName) { res.status(400).json({ error: 'Missing required fields: username, firstName, lastName', }); return; } const newUser = await service.createUser(userData, userClass); res.status(201).json(newUser); } catch (error) { getLogger().error('❌ Error creating user:', error); res.status(500).json({ error: 'Internal server error' }); } } export async function deleteUserHandler(req: Request, res: Response, service: UserService): Promise { try { const username = req.params.username; if (!username) { res.status(400).json({ error: 'Missing required field: username' }); return; } const deletedUser = await service.deleteUser(username); if (!deletedUser) { res.status(404).json({ error: `User with username '${username}' not found.`, }); return; } res.status(200).json(deletedUser); } catch (error) { getLogger().error('❌ Error deleting user:', error); res.status(500).json({ error: 'Internal server error' }); } }