{"info":{"_postman_id":"8c0b8201-f6d8-43b9-8fad-a7df09b1100c","name":"Projet API REST - Bintou Diallo","description":"<html><head></head><body><p>Cette collection Postman regroupe l’ensemble des requêtes permettant de tester le bon fonctionnement de l’API que j'ai créée dans le cdre de mon projet \"My Social Networks\".</p>\n<p>Elle a pour objectif de vérifier que chaque endpoint exposé par l’API répond correctement aux spécifications fonctionnelles demandées.</p>\n<p>Chaque requête correspond à une action précise du système (authentification, gestion des utilisateurs, groupes, événements, albums photo, sondages et billetterie).</p>\n<p>Les tests permettent de valider :<br>• la structure des routes,<br>• la gestion des droits d’accès (JWT),<br>• la cohérence des données échangées,<br>• et le bon enchaînement des fonctionnalités côté API.</p>\n<p>Cette collection est conçue pour être importée directement dans Postman afin que la personne souhaitant tester mon API puisse la tester rapidement et sans configuration supplémentaire, à partir des endpoints fournis.</p>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[],"owner":"49072499","collectionId":"8c0b8201-f6d8-43b9-8fad-a7df09b1100c","publishedId":"2sBXc8pPE6","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2026-02-06T12:59:34.000Z"},"item":[{"name":"Création d'un utilisateur","id":"ca86af7e-b156-4ff7-bdea-84df65c2591f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"email\" : \"user@email.com\",\r\n    \"password\" : \"motdepasse\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:3000/auth/register","description":"<p>Cette requête crée un nouvel utilisateur en base MongoDB.<br />Le backend vérifie l’unicité de l’email, hash le mot de passe avant stockage et persiste l’utilisateur via le modèle User.<br />Cette route est publique et ne nécessite pas de token.</p>\n","urlObject":{"protocol":"http","port":"3000","path":["auth","register"],"host":["localhost"],"query":[],"variable":[]}},"response":[],"_postman_id":"ca86af7e-b156-4ff7-bdea-84df65c2591f"},{"name":"Connexion d'un utilisateur","id":"34b774da-cb87-49da-89e9-55a12ffaa23a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"POST","header":[{"key":"Authorization","value":"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI2OTg1YzQ1ZGNlNGI0MmRhYzdlYWY1NjQiLCJpYXQiOjE3NzAzNzYxNTUsImV4cCI6MTc3MDM4MzM1NX0.DV6mdg21YkVR-Uzy9C_2vBFml7ZfAkeN8UR4sbvw0VU","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"email\" : \"user@email.com\",\r\n    \"password\" : \"motdepasse\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:3000/auth/login","description":"<p>Cette requête permet d’authentifier un utilisateur existant.<br />Si l’email et le mot de passe correspondent, un token JWT est généré et retourné.<br />Ce token est ensuite utilisé pour sécuriser les routes protégées via le middleware JWT.</p>\n","urlObject":{"protocol":"http","port":"3000","path":["auth","login"],"host":["localhost"],"query":[],"variable":[]}},"response":[],"_postman_id":"34b774da-cb87-49da-89e9-55a12ffaa23a"},{"name":"Lister les utilisateurs","id":"c7c89917-44a2-4c7a-a04d-d8cbb6ba1c94","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:3000/users/","description":"<p>Cette requête permet de récupérer la liste des utilisateurs enregistrés en base de données.<br />Elle interroge le modèle User et retourne les informations publiques des utilisateurs.<br />Les champs sensibles (comme le mot de passe) sont exclus de la réponse grâce à la transformation définie dans le schéma Mongoose.<br />Cette route permet notamment de vérifier l’existence des utilisateurs et d’exploiter leurs identifiants pour les relations avec les groupes, événements et autres ressources.</p>\n","urlObject":{"protocol":"http","port":"3000","path":["users",""],"host":["localhost"],"query":[],"variable":[]}},"response":[],"_postman_id":"c7c89917-44a2-4c7a-a04d-d8cbb6ba1c94"},{"name":"Création d'un groupe","id":"2b53eac4-dbf0-41c6-a3cf-c4cfced29504","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"POST","header":[{"key":"Authorization","value":"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI2OTg1YzQ1ZGNlNGI0MmRhYzdlYWY1NjQiLCJpYXQiOjE3NzAzNzYxNTUsImV4cCI6MTc3MDM4MzM1NX0.DV6mdg21YkVR-Uzy9C_2vBFml7ZfAkeN8UR4sbvw0VU","type":"text"}],"body":{"mode":"raw","raw":"{\r\n  \"name\": \"Groupe Soirée\",\r\n  \"description\": \"Organisation soirée\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:3000/groups/","description":"<p>Cette requête permet à un utilisateur authentifié de créer un groupe.<br />L’utilisateur connecté est automatiquement ajouté comme administrateur et membre du groupe.<br />Les données sont validées puis enregistrées via le modèle group.</p>\n","urlObject":{"protocol":"http","port":"3000","path":["groups",""],"host":["localhost"],"query":[],"variable":[]}},"response":[],"_postman_id":"2b53eac4-dbf0-41c6-a3cf-c4cfced29504"},{"name":"Lister les groupes","id":"8657feb1-6f5e-445b-aa17-2172d0a2fee4","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"GET","header":[],"url":"http://localhost:3000/groups/","description":"<p>Cette requête retourne la liste des groupes publics.<br />Aucune authentification n’est requise.<br />Elle permet d’afficher les groupes accessibles à tous les utilisateurs.</p>\n","urlObject":{"protocol":"http","port":"3000","path":["groups",""],"host":["localhost"],"query":[],"variable":[]}},"response":[],"_postman_id":"8657feb1-6f5e-445b-aa17-2172d0a2fee4"},{"name":"Création d'un évènement","id":"43931536-6e41-447e-b0ac-c8d465ee6d45","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Authorization","value":"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI2OTg1YzQ1ZGNlNGI0MmRhYzdlYWY1NjQiLCJpYXQiOjE3NzAzNzQ5NTcsImV4cCI6MTc3MDM4MjE1N30.5n9N7Wy0MSROYIQrwxTyzvrvJGzOUeX9E69RqyUTf6o","type":"text"}],"body":{"mode":"raw","raw":"{\r\n  \"name\": \"Soirée test\",\r\n  \"description\": \"Event de test\",\r\n  \"dateStart\": \"2026-02-10T18:00:00.000Z\",\r\n  \"dateEnd\": \"2026-02-10T23:00:00.000Z\",\r\n  \"location\": \"Paris\",\r\n  \"isPublic\": true\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:3000/events","description":"<p>Cette requête crée un événement en base de données.</p>\n<p>L’utilisateur connecté est défini comme organisateur et participant par défaut.</p>\n<p>Les dates, le lieu et les informations principales sont validés avant persistance via le modèle Event.</p>\n","urlObject":{"protocol":"http","port":"3000","path":["events"],"host":["localhost"],"query":[],"variable":[]}},"response":[],"_postman_id":"43931536-6e41-447e-b0ac-c8d465ee6d45"},{"name":"Lister les évènements","id":"d8ae0219-3a21-4b30-a21d-5f262bd4ef24","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"GET","header":[{"key":"Authorization","value":"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI2OTg1YzQ1ZGNlNGI0MmRhYzdlYWY1NjQiLCJpYXQiOjE3NzAzNzQ5NTcsImV4cCI6MTc3MDM4MjE1N30.5n9N7Wy0MSROYIQrwxTyzvrvJGzOUeX9E69RqyUTf6o","type":"text"}],"url":"http://localhost:3000/events/","description":"<p>Cette requête retourne la liste des événements publics.<br />Elle permet d’accéder aux événements disponibles sans authentification.</p>\n","urlObject":{"protocol":"http","port":"3000","path":["events",""],"host":["localhost"],"query":[],"variable":[]}},"response":[],"_postman_id":"d8ae0219-3a21-4b30-a21d-5f262bd4ef24"},{"name":"Création album photo pour un évènement","id":"eeb6f93b-1a3b-4ffd-ba59-c303cbfc3341","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Authorization","value":"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI2OTg1YzQ1ZGNlNGI0MmRhYzdlYWY1NjQiLCJpYXQiOjE3NzAzNzYxNTUsImV4cCI6MTc3MDM4MzM1NX0.DV6mdg21YkVR-Uzy9C_2vBFml7ZfAkeN8UR4sbvw0VU","type":"text"}],"body":{"mode":"raw","raw":"{\r\n  \"title\": \"Album Soirée de fin d’année\",\r\n  \"description\": \"Photos de la soirée\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:3000/albums/events/6985cc25ce4b42dac7eaf56e","description":"<p>Cette requête crée un album photo associé à un événement existant.<br />L’événement est vérifié via son identifiant, puis l’album est persisté avec une référence vers l’événement.<br />Cette route est protégée par authentification.</p>\n","urlObject":{"protocol":"http","port":"3000","path":["albums","events","6985cc25ce4b42dac7eaf56e"],"host":["localhost"],"query":[],"variable":[]}},"response":[],"_postman_id":"eeb6f93b-1a3b-4ffd-ba59-c303cbfc3341"},{"name":"Lister les albums photo","id":"a6d1267c-5e43-46a8-9dba-eb7336f96c15","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"GET","header":[],"url":"http://localhost:3000/albums/events/6985cc25ce4b42dac7eaf56e","description":"<p>Cette requête retourne l’ensemble des albums photo liés à un événement donné.<br />Elle permet de récupérer les ressources multimédias associées à un événement.</p>\n","urlObject":{"protocol":"http","port":"3000","path":["albums","events","6985cc25ce4b42dac7eaf56e"],"host":["localhost"],"query":[],"variable":[]}},"response":[],"_postman_id":"a6d1267c-5e43-46a8-9dba-eb7336f96c15"},{"name":"Création d'un sondage pour un évènement","id":"fb42b2c7-07c6-4028-aabb-490938f0bef4","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"POST","header":[{"key":"Authorization","value":"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI2OTg1YzQ1ZGNlNGI0MmRhYzdlYWY1NjQiLCJpYXQiOjE3NzAzNzYxNTUsImV4cCI6MTc3MDM4MzM1NX0.DV6mdg21YkVR-Uzy9C_2vBFml7ZfAkeN8UR4sbvw0VU","type":"text"}],"body":{"mode":"raw","raw":"{\r\n  \"title\": \"Organisation\",\r\n  \"questions\": [\r\n    {\r\n      \"question\": \"Quelle heure ?\",\r\n      \"answers\": [\"18h\", \"19h\", \"20h\"]\r\n    }\r\n  ]\r\n}\r\n","options":{"raw":{"language":"json"}}},"url":"http://localhost:3000/polls/events/6985cc25ce4b42dac7eaf56e","description":"<p>Cette requête permet de créer un sondage rattaché à un événement.</p>\n<p>Chaque sondage contient une ou plusieurs questions, chacune avec plusieurs options de réponse.</p>\n<p>Le sondage est lié à l’événement et à l’utilisateur créateur via les relations définies dans le modèle Poll.</p>\n","urlObject":{"protocol":"http","port":"3000","path":["polls","events","6985cc25ce4b42dac7eaf56e"],"host":["localhost"],"query":[],"variable":[]}},"response":[],"_postman_id":"fb42b2c7-07c6-4028-aabb-490938f0bef4"},{"name":"Création d'un type de billet","id":"6170b25c-3929-4249-a0a0-f3e1ffecbeec","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Authorization","value":"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI2OTg1YzQ1ZGNlNGI0MmRhYzdlYWY1NjQiLCJpYXQiOjE3NzAzNzYxNTUsImV4cCI6MTc3MDM4MzM1NX0.DV6mdg21YkVR-Uzy9C_2vBFml7ZfAkeN8UR4sbvw0VU","type":"text"}],"body":{"mode":"raw","raw":"{\r\n  \"name\": \"Billet Standard\",\r\n  \"price\": 15,\r\n  \"quantity\": 100\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:3000/tickets/events/6985cc25ce4b42dac7eaf56e/types","description":"<p>Cette requête permet de créer un type de billet pour un événement.<br />Un type de billet définit un nom, un prix et une quantité disponible.<br />Les données sont enregistrées en base avec une référence vers l’événement concerné.</p>\n","urlObject":{"protocol":"http","port":"3000","path":["tickets","events","6985cc25ce4b42dac7eaf56e","types"],"host":["localhost"],"query":[],"variable":[]}},"response":[],"_postman_id":"6170b25c-3929-4249-a0a0-f3e1ffecbeec"},{"name":"Achat d'un billet","id":"92b3ab22-5063-4c4e-b4d1-3ad8147ef145","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Authorization","value":"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI2OTg1YzQ1ZGNlNGI0MmRhYzdlYWY1NjQiLCJpYXQiOjE3NzAzNzYxNTUsImV4cCI6MTc3MDM4MzM1NX0.DV6mdg21YkVR-Uzy9C_2vBFml7ZfAkeN8UR4sbvw0VU","type":"text"}],"body":{"mode":"raw","raw":"{\r\n  \"firstname\": \"Bintou\",\r\n  \"lastname\": \"DIALLO\",\r\n  \"address\": \"12 rue des licornes, 99087 Rainbow-Town\"\r\n}\r\n","options":{"raw":{"language":"json"}}},"url":"http://localhost:3000/tickets/types/6985d7c311f9c97ef73e74e5/buy","description":"<p>Cette requête permet d’acheter un billet à partir d’un type de billet existant.<br />Lors de l’achat, la quantité disponible est décrémentée côté backend afin de garantir la cohérence du stock.<br />Les informations de l’acheteur sont validées avant confirmation.</p>\n","urlObject":{"protocol":"http","port":"3000","path":["tickets","types","6985d7c311f9c97ef73e74e5","buy"],"host":["localhost"],"query":[],"variable":[]}},"response":[],"_postman_id":"92b3ab22-5063-4c4e-b4d1-3ad8147ef145"}]}