API REST pour DealExpress — projet d'exercice (Auth, Deals, Votes, Comments, Modération)
- Installer les dépendances
cd c:\Users\zlata\Documents\GitHub\TP-API-B3
npm install-
Copier
.env.exampleen.envet renseignerMONGO_URLetJWT_SECRET. -
Lancer en développement
npm run devAuth
POST /api/auth/register— inscription (body:username,email,password)POST /api/auth/login— login (body:email,password)GET /api/auth/me— profil (Authorization: Bearer )
Deals
GET /api/deals— liste publique (only approved) (query:page,limit)GET /api/deals/search?q=term— recherche title/descriptionGET /api/deals/:id— détails (author, comments, votes counts)POST /api/deals— créer (auth required) body:title,description,price,category,...PUT /api/deals/:id— modifier (owner only, only if pending)DELETE /api/deals/:id— supprimer (owner or admin)
Votes
POST /api/deals/:id/vote— voter (body:{ "type": "hot" }or{ "type": "cold" })DELETE /api/deals/:id/vote— retirer son vote
Comments
GET /api/deals/:dealId/comments— listerPOST /api/deals/:dealId/comments— ajouter (auth required)PUT /api/comments/:id— modifier (owner only)DELETE /api/comments/:id— supprimer (owner or admin)
Admin / Modération
GET /api/admin/deals/pending— lister pending (moderator/admin)PATCH /api/admin/deals/:id/moderate— approuver/rejeter (moderator/admin) body:{ "status": "approved" }GET /api/admin/users— liste des utilisateurs (admin)PATCH /api/admin/users/:id/role— changer rôle (admin) body:{ "role": "moderator" }
- Mots de passe hashés avec
bcryptjs. - JWT pour l'authentification, le token contient
idetrole. express-validatorpour valider les entrées.- Rôles:
user,moderator,admin.
- Role admin : email :axel@gmail.com | mot de passe : axelito78 | username : axel
- Role moderator : email : jean@gmail.com | mot de passe : jeandu78 | username : jean
- Role user : email : paul@gmail.com | mot de passe : pauldu78 | username : paul
- Mongoose (MongoDB). Le modèle
Votecontient un index unique(userId,dealId)pour empêcher les doublons.