You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

451 lines
12 KiB

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;