# Documentation API de gestion des utilisateurs et tickets

## Description

Cette API permet de gérer les utilisateurs ainsi que les tickets de réservation pour une exposition. Elle inclut des fonctionnalités de gestion des utilisateurs (connexion, ajout, suppression, modification) ainsi que de gestion des tickets de réservation (consultation, ajout, suppression, modification).

## Endpoints

### 1. Connexion

#### `POST /api.php?action=login`

Permet à un utilisateur de se connecter en fournissant son email et mot de passe.

**Paramètres** (via POST) :
- `email` : L'email de l'utilisateur.
- `mdp` : Le mot de passe de l'utilisateur.

**Réponse** :
- **200** : Connexion réussie.
- **300** : Email ou mot de passe incorrect.
- **400** : Email et mot de passe requis.

### 2. Gestion des utilisateurs

#### `GET /api.php?action=user&id={id}`

Permet de récupérer les informations d'un utilisateur par son ID.

**Paramètres** (via GET) :
- `id` : L'ID de l'utilisateur.

**Réponse** :
- **200** : Utilisateur trouvé.
- **300** : Utilisateur non trouvé.
- **400** : Paramètre `id` manquant.

#### `GET /api.php?action=user`

Permet de récupérer la liste de tous les utilisateurs.

**Réponse** :
- **200** : Liste des utilisateurs récupérée.

#### `POST /api.php?action=add_user`

Permet d'ajouter un nouvel utilisateur.

**Paramètres** (via POST) :
- `nom` : Le nom de l'utilisateur.
- `prenom` : Le prénom de l'utilisateur.
- `email` : L'email de l'utilisateur.
- `mdp` : Le mot de passe de l'utilisateur.

**Réponse** :
- **200** : Utilisateur ajouté avec succès.
- **400** : Paramètre manquant.

#### `DELETE /api.php?action=supr_user&id={id}`

Permet de supprimer un utilisateur en fonction de son ID.

**Paramètres** (via GET) :
- `id` : L'ID de l'utilisateur.

**Réponse** :
- **200** : Utilisateur supprimé avec succès.
- **300** : Vous ne pouvez pas supprimer l'administrateur (ID = 1).
- **400** : Paramètre `id` manquant.

#### `PUT /api.php?action=modify_user`

Permet de modifier un utilisateur existant.

**Paramètres** (via PUT - JSON) :
- `user_id` : L'ID de l'utilisateur.
- `nom` : Le nom de l'utilisateur.
- `prenom` : Le prénom de l'utilisateur.
- `email` : L'email de l'utilisateur.
- `mdp` : Le mot de passe de l'utilisateur.

**Réponse** :
- **200** : Utilisateur modifié avec succès.
- **400** : Paramètres manquants.

### 3. Gestion des tickets

#### `GET /api.php?action=ticket&id={id}`

Permet de récupérer un ticket de réservation par son ID.

**Paramètres** (via GET) :
- `id` : L'ID du ticket.

**Réponse** :
- **200** : Ticket trouvé.
- **300** : Ticket non trouvé.
- **400** : Paramètre `id` manquant.

#### `GET /api.php?action=ticket&user_id={user_id}`

Permet de récupérer tous les tickets d'un utilisateur par son ID.

**Paramètres** (via GET) :
- `user_id` : L'ID de l'utilisateur.

**Réponse** :
- **200** : Ticket(s) trouvé(s).
- **300** : Aucun ticket trouvé.
- **400** : Paramètre `user_id` manquant.

#### `GET /api.php?action=ticket`

Permet de récupérer tous les tickets de réservation.

**Réponse** :
- **200** : Tickets récupérés.

#### `POST /api.php?action=add_ticket`

Permet d'ajouter un ticket de réservation.

**Paramètres** (via POST) :
- `user_id` : L'ID de l'utilisateur.
- `expo_id` : L'ID de l'exposition.
- `date` : La date de la réservation.
- `heure` : L'heure de la réservation.
- `nb_ticket` : Le nombre de tickets réservés.

**Réponse** :
- **200** : Ticket ajouté avec succès.
- **400** : Paramètre manquant.

#### `DELETE /api.php?action=supr_ticket&id={id}`

Permet de supprimer un ticket de réservation par son ID.

**Paramètres** (via GET) :
- `id` : L'ID du ticket.

**Réponse** :
- **200** : Ticket supprimé avec succès.
- **400** : Paramètre `id` manquant.

#### `PUT /api.php?action=modify_ticket`

Permet de modifier un ticket de réservation.

**Paramètres** (via PUT - JSON) :
- `id` : L'ID du ticket.
- `expo_id` : L'ID de l'exposition.
- `user_id` : L'ID de l'utilisateur.
- `date` : La nouvelle date de la réservation.

**Réponse** :
- **200** : Ticket modifié avec succès.
- **400** : Paramètres manquants.

---

## Codes de statut

- **200** : Succès.
- **300** : Problème lié à la demande (email/mot de passe incorrect, utilisateur ou ticket non trouvé, etc.).
- **400** : Paramètre manquant ou requête invalide.
- **500** : Erreur serveur (en cas d'échec de la connexion à la base de données).

---

### Sécurité

L'API utilise une méthode de hachage pour sécuriser les mots de passe des utilisateurs via `password_hash()` et `password_verify()`.
