Lab - Web Services

On souhaite transformer notre application de gestion d’annonces immobilières (réalisée au TP précédent) en un WebService complet, sécurisé et documenté, utilisable par :

Votre mission est de concevoir un service Web moderne, en TypeScript, respectant les standards REST et GraphQL.

Le framework est libre (NestJS, Fastify, Express + Zod, Hono, Elysia…), mais le projet doit impérativement être :


Objectifs

  1. Créer une API REST complète, typée, valide, paginée, documentée en Swagger/OpenAPI.
  2. Proposer une API GraphQL équivalente, avec schéma + résolveurs.
  3. Sécuriser l’ensemble à l’aide d’un système d’authentification JWT.
  4. Gérer les droits (roles : agent, user, etc.).
  5. Mettre en place des tests :
    • tests unitaires (services),
    • tests End-to-End (API REST + GraphQL).
  6. Rendre le code propre, typé, organisé.
  7. Mener un projet collaboratif structuré avec Git :
    • création d’une hiérarchie de branches fonctionnelles,
    • organisation du développement (feature branches, PR, intégration progressive),
    • utilisation rigoureuse de la forge universitaire.

Description fonctionnelle

Votre WebService doit gérer au minimum les entités suivantes :

Annonce immobilière

Utilisateur

(Optionnel mais conseillé)


Partie 1 — Création de l’API REST (Contract-first ou Code-first au choix)

1.1. Définir le contrat de l’API

Deux approches sont possibles (à choisir) :

A. Code-first

B. Contract-first


1.2. Endpoints REST obligatoires

Annonces

Méthode Endpoint Rôle
GET /annonces Liste paginée
GET /annonces/:id Détails
POST /annonces Création (auth requise)
PUT/PATCH /annonces/:id Modification
DELETE /annonces/:id Suppression (admin ou agent)

Authentification

Méthode Endpoint Rôle
POST /auth/signup Inscription
POST /auth/login Génère un JWT
GET /auth/me Infos du user connecté

Partie 2 — Authentification & Tokens JWT

Vous devez mettre en place un système :

Exemples de requêtes :

curl -H "Authorization: Bearer <token>" \
     https://localhost:3000/annonces

Partie 3 — Documentation Swagger

Votre WebService doit exposer une page de documentation :


Partie 4 — Endpoint GraphQL obligatoire

Vous devez proposer un schéma GraphQL équivalent aux routes REST avec des requêtes de consultation (query) de modification (mutation).

Contraintes techniques


Partie 5 — Tests unitaires & End-to-End

Vous devez écrire :

Tests unitaires

Sur :

Tests E2E

Sur :

Outils conseillés :


Partie 6 — Livrables

Ce projet est à effectuer en binôme. Dès le début du TP, vous devez m’envoyer un email avec objet "[M2 IWOCS WEB] Projet n°2" contenant les détails de votre projet (noms, prénoms, numéro étuidants et URL sur la forge). Le projet est hébergé sur la forge dans un nouveau projet, privé, auquel je suis invité avec les droits developer.

Votre projet forge doit contenir:

  1. Le code complet structuré
  2. Le fichier swagger.yaml (si contract-first)
  3. Une page /docs fonctionnelle
  4. Les scripts npm suivants :

    • npm run start
    • npm run build
    • npm run test
    • npm run test:e2e
  5. Un README clair expliquant :

    • comment lancer le service
    • comment tester l’API
    • où trouver la documentation

Évaluation

Le projet doit être rendu avant le 13 décembre 2025. Il servira de base à l’évaluation du lundi 15 décembre. Les détails de l’implémentation et le fonctionnement du projet seront présentés et discutés.

Les compétences seront validées à la fois sur la base du rendu du projet et de l’évaluation orale.

Ce travail doit être réalisé en binôme. Chaque membre du binôme doit être capable de présenter le projet et de répondre aux questions.

Liste des aptitudes évaluées (colonne « Web Services »)