Module 02 ⭐⭐ Moyen ~2h

🛍️ API Catalogue Produits

Créer une API de catalogue produits complète avec controllers, routes avancées, query params, et providers. Gérer la pagination, le tri, et le filtrage.

🎯 Objectifs

🔧 Code de démarrage

// products.controller.ts — à compléter
@Controller('products')
export class ProductsController {
  constructor(private readonly productsService: ProductsService) {}

  // GET /products/featured — DOIT être AVANT /products/:id !
  @Get('featured')
  getFeatured() { ... }

  // GET /products?page=1&limit=10&sort=price&order=asc&category=electronics
  @Get()
  findAll(
    @Query('page', new DefaultValuePipe(1), ParseIntPipe) page: number,
    @Query('limit', new DefaultValuePipe(10), ParseIntPipe) limit: number,
    @Query('sort', new DefaultValuePipe('createdAt')) sort: string,
    @Query('order', new DefaultValuePipe('desc')) order: 'asc' | 'desc',
    @Query('category') category?: string,
    @Query('minPrice', new DefaultValuePipe(0), ParseFloatPipe) minPrice?: number,
    @Query('maxPrice', ParseFloatPipe) maxPrice?: number,
  ) { ... }

  // GET /products/:id
  @Get(':id')
  findOne(@Param('id') id: string) { ... }

  // GET /products/:id/related
  @Get(':id/related')
  getRelated(@Param('id') id: string) { ... }
}

✅ Endpoints à implémenter

Route Description
GET /productsPagination + tri + filtres prix/catégorie
GET /products/featuredProduits mis en avant (top 6)
GET /products/:idDétail + incrémente vues
GET /products/:id/relatedProduits similaires (même catégorie)
GET /categories/:id/productsProduits d'une catégorie
POST /products/:id/reviewsAjouter un avis
Bonus : Ajoutez un service CartService avec scope REQUEST pour un panier temporaire par requête. Ajoutez POST /cart et GET /cart.
← Cours ✏️ Exercices 🧠 QCM NS02 Module 03 →