From 86ccc3ef4fc91510d0644f6fc14236629c85874b Mon Sep 17 00:00:00 2001 From: soufiane Date: Wed, 19 Nov 2025 15:07:28 +0100 Subject: [PATCH] feat: add getUserById endpoint for admin user details MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added GET /api/admin/users/:id endpoint to retrieve detailed user information including contact info, personal data, and ticket statistics. This enables the admin interface to display comprehensive user details when clicking the "Détails" button. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- src/controllers/admin.controller.js | 43 +++++++++++++++++++++++++++++ src/routes/admin.routes.js | 1 + 2 files changed, 44 insertions(+) diff --git a/src/controllers/admin.controller.js b/src/controllers/admin.controller.js index 92cb1df8..5104511b 100644 --- a/src/controllers/admin.controller.js +++ b/src/controllers/admin.controller.js @@ -450,6 +450,48 @@ export const createEmployee = asyncHandler(async (req, res, next) => { }); }); +/** + * Récupérer un utilisateur par ID + * GET /api/admin/users/:id + */ +export const getUserById = asyncHandler(async (req, res, next) => { + const { id } = req.params; + + const result = await pool.query( + `SELECT + u.id, + u.email, + u.first_name, + u.last_name, + u.phone, + u.address, + u.city, + u.postal_code, + u.role, + u.is_verified, + u.created_at, + u.date_of_birth, + u.gender, + COUNT(t.id) as tickets_count, + COUNT(CASE WHEN t.status = 'PENDING' THEN 1 END) as pending_tickets, + COUNT(CASE WHEN t.status = 'CLAIMED' THEN 1 END) as claimed_tickets + FROM users u + LEFT JOIN tickets t ON u.id = t.user_id + WHERE u.id = $1 + GROUP BY u.id`, + [id] + ); + + if (result.rows.length === 0) { + return next(new AppError('Utilisateur non trouvé', 404)); + } + + res.json({ + success: true, + data: result.rows[0], + }); +}); + /** * Mettre à jour un utilisateur * PUT /api/admin/users/:id @@ -812,6 +854,7 @@ export default { updatePrize, deletePrize, getAllUsers, + getUserById, createEmployee, updateUser, deleteUser, diff --git a/src/routes/admin.routes.js b/src/routes/admin.routes.js index aae28a46..3f9c188d 100644 --- a/src/routes/admin.routes.js +++ b/src/routes/admin.routes.js @@ -32,6 +32,7 @@ router.delete('/prizes/:id', validate(deletePrizeSchema), adminController.delete // Gestion des utilisateurs router.get('/users', validate(paginationSchema), adminController.getAllUsers); +router.get('/users/:id', adminController.getUserById); router.post('/employees', validate(createEmployeeSchema), adminController.createEmployee); router.put('/users/:id', validate(updateUserSchema), adminController.updateUser); router.delete('/users/:id', adminController.deleteUser);