================================================================================ EUROFAT API - DEMANDES ENDPOINTS ================================================================================ BASE URL: http://localhost/EUROFAT_API/public/api ================================================================================ 1. GET ALL DEMANDES ================================================================================ Method: GET Endpoint: /api/demandes Headers: - Accept: application/json Description: Récupère toutes les demandes avec pagination Parameters (optional): - status: Filter by status - type_demande: Filter by type (Transport/Messagerie) - id_client: Filter by client ID - date_from: Filter by date (start) - date_to: Filter by date (end) - search: Search in client name - per_page: Items per page (default: 15) Example Request: GET /api/demandes GET /api/demandes?status=Planifiée GET /api/demandes?type_demande=Transport&per_page=20 ================================================================================ 2. GET DEMANDES STATISTICS ================================================================================ Method: GET Endpoint: /api/demandes/statistics Headers: - Accept: application/json Description: Récupère les statistiques des demandes (total, par statut, etc.) Example Request: GET /api/demandes/statistics ================================================================================ 3. CREATE NEW DEMANDE ================================================================================ Method: POST Endpoint: /api/demandes Headers: - Content-Type: application/json - Accept: application/json Body (JSON): { "id_client": 1, "type_demande": "Transport", "nombre_colies": 15, "tailles_colies": "XL", "nombre_tonne": 2.5, "date_enlevement": "2025-12-20 08:00:00", "manutention": true, "retour": false, "notes": "Notes about the demande", "adresse_enlevement": "123 Rue Test, Casablanca", "adresse_livraison": "456 Avenue Test, Rabat", "id_ville_depart": 1, "id_ville_arrivee": 2 } Required Fields: - id_client - type_demande (Transport or Messagerie) - date_enlevement - adresse_enlevement - adresse_livraison - id_ville_depart - id_ville_arrivee ================================================================================ 4. GET SINGLE DEMANDE ================================================================================ Method: GET Endpoint: /api/demandes/{id} Headers: - Accept: application/json Description: Récupère une demande spécifique par son ID Example Request: GET /api/demandes/1 GET /api/demandes/5 ================================================================================ 5. UPDATE DEMANDE STATUS ================================================================================ Method: PATCH Endpoint: /api/demandes/{id}/status Headers: - Content-Type: application/json - Accept: application/json Body (JSON): { "status": "Planifiée" } Valid Status Values: - À planifier - Planifiée - Enlèvement en cours - Enlevée - En livraison - Livrée - Anomalie - Clôturée Example Request: PATCH /api/demandes/1/status Body: { "status": "Planifiée" } ================================================================================ 6. UPDATE DEMANDE ================================================================================ Method: PUT Endpoint: /api/demandes/{id} Headers: - Content-Type: application/json - Accept: application/json Body (JSON) - All fields are optional: { "id_client": 1, "type_demande": "Transport", "nombre_colies": 20, "tailles_colies": "L", "nombre_tonne": 3.0, "date_enlevement": "2025-12-21 10:00:00", "manutention": true, "retour": false, "notes": "Updated notes", "adresse_enlevement": "New pickup address", "adresse_livraison": "New delivery address", "id_ville_depart": 2, "id_ville_arrivee": 3 } Example Request: PUT /api/demandes/1 Body: { "notes": "Updated notes", "nombre_colies": 20 } ================================================================================ 7. GET DEMANDES BY CLIENT ================================================================================ Method: GET Endpoint: /api/demandes/client/{clientId} Headers: - Accept: application/json Description: Récupère toutes les demandes d'un client spécifique Parameters (optional): - per_page: Items per page (default: 15) Example Request: GET /api/demandes/client/1 GET /api/demandes/client/1?per_page=50 ================================================================================ 8. FILTER DEMANDES BY STATUS ================================================================================ Method: GET Endpoint: /api/demandes?status={status} Headers: - Accept: application/json Description: Filtre les demandes par statut Example Request: GET /api/demandes?status=Planifiée GET /api/demandes?status=À%20planifier ================================================================================ 9. FILTER DEMANDES BY TYPE ================================================================================ Method: GET Endpoint: /api/demandes?type_demande={type} Headers: - Accept: application/json Description: Filtre les demandes par type Example Request: GET /api/demandes?type_demande=Transport GET /api/demandes?type_demande=Messagerie ================================================================================ 10. DELETE DEMANDE ================================================================================ Method: DELETE Endpoint: /api/demandes/{id} Headers: - Accept: application/json Description: Supprime une demande Example Request: DELETE /api/demandes/1 ================================================================================ RESPONSE FORMATS ================================================================================ Success Response (Single Demande): { "success": true, "data": { "id": 1, "client": { "id": 1, "nom": "Alami", "prenom": "Mohammed", "raison_sociale": "ACME Corporation", "email": "contact@acme.ma", "telephone": "0522-111111", "type_client": "societe" }, "type_demande": "Transport", "nombre_colies": 25, "tailles_colies": "L", "nombre_tonne": 3.5, "date_enlevement": "2025-12-17 22:48:35", "date_enlevement_formatted": "17/12/2025 22:48", "manutention": true, "retour": false, "status": "À planifier", "notes": "Transport urgent", "adresse_enlevement": "123 Boulevard Mohammed V, Casablanca", "adresse_livraison": "456 Avenue Hassan II, Rabat", "ville_depart": { "id": 4, "nom": "Casablanca" }, "ville_arrivee": { "id": 5, "nom": "Rabat" }, "created_at": "2025-12-15 22:48:35", "updated_at": "2025-12-15 22:48:35" } } Success Response (List with Pagination): { "data": [ { /* demande object */ }, { /* demande object */ } ], "links": { "first": "http://localhost/EUROFAT_API/public/api/demandes?page=1", "last": "http://localhost/EUROFAT_API/public/api/demandes?page=3", "prev": null, "next": "http://localhost/EUROFAT_API/public/api/demandes?page=2" }, "meta": { "current_page": 1, "from": 1, "last_page": 3, "per_page": 15, "to": 15, "total": 45 } } Error Response: { "success": false, "message": "Error message", "error": "Detailed error information" } Not Found Response: { "success": false, "message": "Demande non trouvée" } ================================================================================ NOTES ================================================================================ 1. All endpoints require proper headers (Accept: application/json) 2. POST/PUT/PATCH endpoints require Content-Type: application/json 3. Status values are case-sensitive 4. Date format: YYYY-MM-DD HH:MM:SS 5. Boolean values: true/false 6. Pagination is automatic for list endpoints (default: 15 items per page) 7. All responses are in JSON format 8. ID parameters in URL must be integers ================================================================================ COMMON HTTP CODES ================================================================================ 200 - OK (successful GET, PUT, PATCH) 201 - Created (successful POST) 400 - Bad Request (validation errors) 404 - Not Found (resource doesn't exist) 405 - Method Not Allowed (wrong HTTP method) 422 - Unprocessable Entity (validation failed) 500 - Internal Server Error (server error) ================================================================================