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
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;
|
|
|
|
|