const express = require('express'); const router = express.Router(); /** * @swagger * components: * schemas: * Utilisateur: * type: object * required: * - nom * - prenom * - email * - mot_de_passe * properties: * id: * type: integer * description: ID auto-généré * nom: * type: string * maxLength: 50 * description: Nom de famille * prenom: * type: string * maxLength: 50 * description: Prénom * email: * type: string * maxLength: 100 * format: email * description: Adresse email unique * mot_de_passe: * type: string * minLength: 6 * description: Mot de passe (sera hashé) * telephone: * type: string * maxLength: 20 * description: Numéro de téléphone * role: * type: string * enum: [admin, manager, serveur, cuisinier, caissier] * default: serveur * description: Rôle de l'utilisateur * statut: * type: string * enum: [actif, inactif, suspendu] * default: actif * description: Statut du compte * date_embauche: * type: string * format: date * description: Date d'embauche * salaire: * type: number * format: float * description: Salaire de base * adresse: * type: string * description: Adresse complète * date_naissance: * type: string * format: date * description: Date de naissance * photo: * type: string * description: Chemin vers la photo de profil * derniere_connexion: * type: string * format: date-time * description: Date de dernière connexion * preferences: * type: object * description: Préférences utilisateur (JSON) * est_actif: * type: boolean * default: true * description: Utilisateur actif ou non * cree_le: * type: string * format: date-time * description: Date de création * modifie_le: * type: string * format: date-time * description: Date de modification */ /** * @swagger * tags: * name: Utilisateurs * description: Gestion des utilisateurs */ /** * @swagger * /api/utilisateurs: * get: * summary: Lister tous les utilisateurs * tags: [Utilisateurs] * parameters: * - in: query * name: page * schema: * type: integer * default: 1 * description: Numéro de page * - in: query * name: limit * schema: * type: integer * default: 10 * description: Nombre d'éléments par page * - in: query * name: role * schema: * type: string * enum: [admin, manager, serveur, cuisinier, caissier] * description: Filtrer par rôle * - in: query * name: statut * schema: * type: string * enum: [actif, inactif, suspendu] * description: Filtrer par statut * - in: query * name: search * schema: * type: string * description: Recherche dans nom, prénom, email * - in: query * name: sort_by * schema: * type: string * default: cree_le * description: Champ de tri * - in: query * name: sort_order * schema: * type: string * enum: [ASC, DESC] * default: DESC * description: Ordre de tri * responses: * 200: * description: Liste des utilisateurs * 500: * description: Erreur serveur */ router.get('/', UtilisateurController.getAllUtilisateurs); /** * @swagger * /api/utilisateurs/stats: * get: * summary: Statistiques des utilisateurs * tags: [Utilisateurs] * responses: * 200: * description: Statistiques des utilisateurs */ router.get('/stats', UtilisateurController.getStats); /** * @swagger * /api/utilisateurs/search: * get: * summary: Rechercher des utilisateurs * tags: [Utilisateurs] * parameters: * - in: query * name: q * required: true * schema: * type: string * minLength: 2 * description: Terme de recherche * - in: query * name: role * schema: * type: string * description: Filtrer par rôle * - in: query * name: limit * schema: * type: integer * default: 10 * description: Limite de résultats * responses: * 200: * description: Résultats de recherche * 400: * description: Recherche trop courte */ router.get('/search', UtilisateurController.searchUtilisateurs); /** * @swagger * /api/utilisateurs/login: * post: * summary: Connexion utilisateur * tags: [Utilisateurs] * requestBody: * required: true * content: * application/json: * schema: * type: object * required: * - email * - mot_de_passe * properties: * email: * type: string * format: email * mot_de_passe: * type: string * responses: * 200: * description: Connexion réussie * 401: * description: Identifiants incorrects * 400: * description: Données manquantes */ router.post('/login', UtilisateurController.login); /** * @swagger * /api/utilisateurs/{id}: * get: * summary: Obtenir un utilisateur par ID * tags: [Utilisateurs] * parameters: * - in: path * name: id * required: true * schema: * type: integer * description: ID de l'utilisateur * responses: * 200: * description: Utilisateur trouvé * 404: * description: Utilisateur non trouvé */ router.get('/:id', UtilisateurController.getUtilisateurById); /** * @swagger * /api/utilisateurs: * post: * summary: Créer un nouvel utilisateur * tags: [Utilisateurs] * requestBody: * required: true * content: * multipart/form-data: * schema: * type: object * required: * - nom * - prenom * - email * - mot_de_passe * properties: * nom: * type: string * maxLength: 50 * prenom: * type: string * maxLength: 50 * email: * type: string * format: email * mot_de_passe: * type: string * minLength: 6 * telephone: * type: string * role: * type: string * enum: [admin, manager, serveur, cuisinier, caissier] * date_embauche: * type: string * format: date * salaire: * type: number * adresse: * type: string * date_naissance: * type: string * format: date * photo: * type: string * format: binary * responses: * 201: * description: Utilisateur créé * 400: * description: Email déjà utilisé * 500: * description: Erreur serveur */ router.post('/', uploadPhoto, UtilisateurController.createUtilisateur); /** * @swagger * /api/utilisateurs/{id}: * put: * summary: Mettre à jour un utilisateur * tags: [Utilisateurs] * parameters: * - in: path * name: id * required: true * schema: * type: integer * requestBody: * required: true * content: * multipart/form-data: * schema: * type: object * properties: * nom: * type: string * prenom: * type: string * email: * type: string * mot_de_passe: * type: string * telephone: * type: string * role: * type: string * statut: * type: string * date_embauche: * type: string * salaire: * type: number * adresse: * type: string * date_naissance: * type: string * photo: * type: string * format: binary * responses: * 200: * description: Utilisateur mis à jour * 404: * description: Utilisateur non trouvé * 400: * description: Email déjà utilisé */ router.put('/:id', uploadPhoto, UtilisateurController.updateUtilisateur); /** * @swagger * /api/utilisateurs/{id}: * delete: * summary: Supprimer un utilisateur * tags: [Utilisateurs] * parameters: * - in: path * name: id * required: true * schema: * type: integer * responses: * 200: * description: Utilisateur supprimé * 404: * description: Utilisateur non trouvé */ router.delete('/:id', UtilisateurController.deleteUtilisateur); /** * @swagger * /api/utilisateurs/{id}/statut: * patch: * summary: Changer le statut d'un utilisateur * tags: [Utilisateurs] * parameters: * - in: path * name: id * required: true * schema: * type: integer * requestBody: * required: true * content: * application/json: * schema: * type: object * required: * - statut * properties: * statut: * type: string * enum: [actif, inactif, suspendu] * responses: * 200: * description: Statut changé * 400: * description: Statut invalide * 404: * description: Utilisateur non trouvé */ router.patch('/:id/statut', UtilisateurController.changeStatut); /** * @swagger * /api/utilisateurs/{id}/reset-password: * patch: * summary: Réinitialiser le mot de passe * tags: [Utilisateurs] * parameters: * - in: path * name: id * required: true * schema: * type: integer * requestBody: * required: true * content: * application/json: * schema: * type: object * required: * - nouveau_mot_de_passe * properties: * nouveau_mot_de_passe: * type: string * minLength: 6 * responses: * 200: * description: Mot de passe réinitialisé * 400: * description: Mot de passe trop court * 404: * description: Utilisateur non trouvé */ router.patch('/:id/reset-password', UtilisateurController.resetPassword); module.exports = router;