Projet d'exercice pour apprendre à créer des DataSources et Resolvers avec Apollo Server.
- Node.js 22 + TypeScript
- Apollo Server avec Express (support subscriptions via WebSocket)
- Prisma ORM
- PostgreSQL (via Docker)
- Redis (via Docker)
- id, email, name, createdAt
- Relations: reviews
- id, name, description, price, createdAt
- Relations: stock (1-1), reviews (1-n)
- id, productId, quantity, updatedAt
- Relations: product (1-1)
- id, productId, userId, rating, comment, createdAt
- Relations: product, user
# Installer les dépendances
npm install
# Lancer PostgreSQL + Redis
docker-compose up -d
# Générer le client Prisma
npm run prisma:generate
# Créer la base de données et appliquer les migrations
npm run prisma:migrate
# Seed les données
npm run prisma:seed# Mode développement avec hot-reload
npm run dev
# Ouvrir Prisma Studio (interface graphique pour la DB)
npm run prisma:studioLe serveur démarre sur http://localhost:4000/graphql
Les subscriptions sont disponibles sur ws://localhost:4000/graphql
Votre mission : créer les typeDefs GraphQL et les resolvers pour l'API e-commerce.
-
Types GraphQL (dans
src/schema/typeDefs.ts)- User, Product, Stock, Review
- Queries, Mutations, Subscriptions
-
Resolvers (dans
src/schema/resolvers.ts)- Queries : liste produits, détail produit, utilisateurs, etc.
- Mutations : créer/modifier produits, stock, avis
- Subscriptions : notifications temps réel (ex: stock faible, nouveau produit)
-
Context
- Prisma client disponible via
context.prisma - Redis client disponible via
context.redis
- Prisma client disponible via
src/
├── index.ts # Déjà configuré
├── schema/
│ ├── typeDefs.ts # À créer
│ └── resolvers.ts # À créer
├── datasources/ # Optionnel : logique métier
│ ├── ProductDataSource.ts
│ ├── UserDataSource.ts
│ └── ...
# Rebuild de la DB
npm run prisma:migrate
# Re-seed
npm run prisma:seed
# Build production
npm run build
npm start- GraphQL Playground: http://localhost:4000/graphql
- Prisma Studio:
npm run prisma:studio - PostgreSQL: localhost:5432 (user: formation, password: formation123)
- Redis: localhost:6379