Présentation
EcoDrop est une API REST complète modélisant un système de gestion écologique de déchets. Les utilisateurs enregistrent des dépôts dans des points de collecte et gagnent des points selon le type et le poids des déchets. Le système inclut un leaderboard, un contrôle d'accès par rôles et des alertes de surcharge automatiques.
Authentification
Token Base64 avec gestion des rôles USER / ADMIN
CRUD complet
4 ressources : déchets, points, dépôts, utilisateurs
Leaderboard
Classement par score pondéré (poids × points / kilo)
Alertes surcharge
Détection automatique des points remplis à plus de 80%
Architecture technique
Le projet suit une architecture en couches stricte, assurant une séparation claire des responsabilités :
Client HTTP
Bruno / curl / frontend
Authentification
authent.java · VerifToken.java
Contrôleurs REST (Servlets)
DepositAPI · DechetRestAPI · CollectionPointRestAPI · UsersAPI
Couche DAO
DepositDAO · DechetDAO · CollectionPointDAO · UsersDAO
DataSource JDBC
DS.java — Connexion poolée
PostgreSQL
4 tables : users · wastetype · collectionpoint · deposit
Modèle de données
Le schéma relationnel est composé de 4 tables reliées par des clés étrangères. La table deposit fait le lien entre utilisateurs, types de déchets et points de collecte.
users
Comptes utilisateurs avec login, password et rôle (USER / ADMIN)
wastetype
Types de déchets avec nom et points par kilo
collectionpoint
Points de collecte avec adresse et capacité maximale
deposit
Dépôts effectués : utilisateur × déchet × point, poids et date
Endpoints de l'API
Contexte de déploiement :
/context_ecodrop| Méthode | Endpoint | Auth | Description |
|---|---|---|---|
| GET | /auth/token?login=X&password=Y |
Public | Génère un token Base64 |
| Méthode | Endpoint | Auth | Description |
|---|---|---|---|
| GET | /dechets/ | Public | Liste tous les types de déchets |
| GET | /dechets/{id} | Public | Récupère un déchet par ID |
| POST | /dechets/ | User | Crée un nouveau type de déchet |
| PUT | /dechets/{id} | User | Remplace un déchet existant |
| DELETE | /dechets/{id} | Admin | Supprime un type de déchet |
| Méthode | Endpoint | Auth | Description |
|---|---|---|---|
| GET | /points/ | Public | Liste tous les points |
| GET | /points/{id} | Public | Détails d'un point |
| GET | /points/{id}/status | Public | Taux de remplissage + alerte |
| GET | /points/overloaded | Admin | Points surchargés (>80%) |
| PUT | /points/{id} | User | Mise à jour complète |
| PATCH | /points/{id} | User | Mise à jour partielle |
| DELETE | /points/{id}/clear | Admin | Vider un point de collecte |
| Méthode | Endpoint | Auth | Description |
|---|---|---|---|
| GET | /deposit/ | Public | Historique des dépôts |
| GET | /deposit/{id} | Public | Détails d'un dépôt |
| POST | /deposit/ | User | Enregistrer un dépôt |
| PUT | /deposit/{id} | Public | Mise à jour complète |
| PATCH | /deposit/{id} | User | Mise à jour partielle |
| Méthode | Endpoint | Auth | Description |
|---|---|---|---|
| GET | /users/ | Public | Liste tous les utilisateurs |
| GET | /users/leaderboard | Public | Classement des scores |
| PUT | /users/{id} | Public | Mise à jour complète |
| PATCH | /users/{id} | User | Mise à jour partielle |
Compétences développées
Architecture REST
Conception d'une API respectant les conventions HTTP (GET, POST, PUT, PATCH, DELETE)
Pattern DAO
Découplage logique métier / accès aux données avec le pattern Data Access Object
SQL avancé
Jointures, agrégations, sous-requêtes et modélisation relationnelle avec PostgreSQL
Authentification
Système par token Basic Auth Base64 avec contrôle d'accès RBAC
Sérialisation JSON
Conversion objet ↔ JSON avec Jackson (ObjectMapper, annotations)
Tests API
Couverture exhaustive des endpoints avec Bruno (succès + erreurs)