import { UserRepository } from '../../Infrastructure/userRepository.js'; import { GetAllUsersQuery } from '../../Application/users/query/getAllUsersQuery.js'; import { GetAllUsersQueryHandler } from '../../Application/users/query/getAllUsersQueryHandler.js'; import { GetUserByIdQuery } from '../../Application/users/query/getUserByIdQuery.js'; import { GetUserByIdQueryHandler } from '../../Application/users/query/getUserByIdQueryHandler.js'; import { CreateUserCommand } from '../../Application/users/command/createUserCommand.js'; import { CreateUserCommandHandler } from '../../Application/users/command/createUserCommandHandler.js'; import { UpdateUserCommand } from '../../Application/users/command/updateUserCommand.js'; import { UpdateUserCommandHandler } from '../../Application/users/command/updateUserCommandHandler.js'; import { DeleteUserCommand } from '../../Application/users/command/deleteUserCommand.js'; import { DeleteUserCommandHandler } from '../../Application/users/command/deleteUserCommandHandler.js'; const userRepository = new UserRepository(); const getAllUsersQueryHandler = new GetAllUsersQueryHandler(userRepository); const getUserByIdQueryHandler = new GetUserByIdQueryHandler(userRepository); const createUserCommandHandler = new CreateUserCommandHandler(userRepository); const updateUserCommandHandler = new UpdateUserCommandHandler(userRepository); const deleteUserCommandHandler = new DeleteUserCommandHandler(userRepository); export class UserController { async getAll(req, res) { try { const query = new GetAllUsersQuery(); const users = await getAllUsersQueryHandler.handle(query); res.json(users); } catch (error) { res.status(500).json({ error: error.message }); } } async getById(req, res) { try { const query = new GetUserByIdQuery(req.params.id); const user = await getUserByIdQueryHandler.handle(query); res.json(user); } catch (error) { res.status(404).json({ error: error.message }); } } async create(req, res) { try { const command = new CreateUserCommand( req.body.name, req.body.email, req.body.age ); const user = await createUserCommandHandler.handle(command); res.status(201).json(user); } catch (error) { res.status(400).json({ error: error.message }); } } async update(req, res) { try { const command = new UpdateUserCommand( req.params.id, req.body.name, req.body.email, req.body.age ); const user = await updateUserCommandHandler.handle(command); res.json(user); } catch (error) { res.status(404).json({ error: error.message }); } } async delete(req, res) { try { const command = new DeleteUserCommand(req.params.id); await deleteUserCommandHandler.handle(command); res.status(204).send(); } catch (error) { res.status(404).json({ error: error.message }); } } }