Aller au contenu principal

Projet A: Plateforme E-Commerce

Description​

Developper une API RESTful complete pour une plateforme de commerce electronique permettant la gestion des produits, des utilisateurs, du panier et des commandes.


Fonctionnalites Requises​

1. Gestion des Utilisateurs​

POST   /api/auth/register     - Inscription
POST /api/auth/login - Connexion (retourne JWT)
GET /api/users/me - Profil utilisateur
PUT /api/users/me - Modifier profil

Entite User:

  • id, email, password, firstName, lastName
  • role (CUSTOMER, ADMIN)
  • createdAt, updatedAt

2. Catalogue de Produits​

GET    /api/products              - Liste des produits (pagination)
GET /api/products/{id} - Detail d'un produit
GET /api/products/search - Recherche par nom/categorie
POST /api/products - Creer produit (ADMIN)
PUT /api/products/{id} - Modifier produit (ADMIN)
DELETE /api/products/{id} - Supprimer produit (ADMIN)

Entite Product:

  • id, name, description, price, stock
  • category (relation ManyToOne)
  • imageUrl, active

Entite Category:

  • id, name, description

3. Panier​

GET    /api/cart                  - Voir le panier
POST /api/cart/items - Ajouter un produit
PUT /api/cart/items/{id} - Modifier quantite
DELETE /api/cart/items/{id} - Supprimer du panier
DELETE /api/cart - Vider le panier

Entite CartItem:

  • id, cart, product, quantity, price

4. Commandes​

POST   /api/orders                - Creer commande (depuis panier)
GET /api/orders - Liste des commandes (user)
GET /api/orders/{id} - Detail commande
PUT /api/orders/{id}/status - Modifier statut (ADMIN)
GET /api/admin/orders - Toutes les commandes (ADMIN)

Entite Order:

  • id, user, items, totalAmount
  • status (PENDING, CONFIRMED, SHIPPED, DELIVERED, CANCELLED)
  • shippingAddress, createdAt

Schema de Base de Donnees​

users
├── id (PK)
├── email (UNIQUE)
├── password
├── first_name
├── last_name
├── role
└── created_at

categories
├── id (PK)
├── name
└── description

products
├── id (PK)
├── name
├── description
├── price
├── stock
├── category_id (FK)
├── image_url
└── active

carts
├── id (PK)
└── user_id (FK, UNIQUE)

cart_items
├── id (PK)
├── cart_id (FK)
├── product_id (FK)
├── quantity
└── price

orders
├── id (PK)
├── user_id (FK)
├── total_amount
├── status
├── shipping_address
└── created_at

order_items
├── id (PK)
├── order_id (FK)
├── product_id (FK)
├── quantity
├── price
└── product_name

Regles Metier​

Stock​

  • Verifier la disponibilite avant ajout au panier
  • Decrementer le stock lors de la commande
  • Restaurer le stock si commande annulee

Prix​

  • Le prix dans le panier doit etre celui du moment
  • Le prix dans la commande est fige

Panier​

  • Un utilisateur a un seul panier
  • Le panier est cree automatiquement
  • Le panier est vide apres une commande

Commandes​

  • Seul l'utilisateur peut voir ses commandes
  • Admin peut voir toutes les commandes
  • Transitions de statut valides:
    • PENDING -> CONFIRMED -> SHIPPED -> DELIVERED
    • PENDING -> CANCELLED
    • CONFIRMED -> CANCELLED

Endpoints Detailles​

Authentification​

POST /api/auth/register
Content-Type: application/json

{
"email": "john@example.com",
"password": "Password123!",
"firstName": "John",
"lastName": "Doe"
}

Response 201:
{
"id": 1,
"email": "john@example.com",
"firstName": "John",
"lastName": "Doe",
"role": "CUSTOMER"
}
POST /api/auth/login
Content-Type: application/json

{
"email": "john@example.com",
"password": "Password123!"
}

Response 200:
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"type": "Bearer",
"expiresIn": 86400
}

Produits​

GET /api/products?page=0&size=10&category=electronics
Authorization: Bearer <token>

Response 200:
{
"content": [
{
"id": 1,
"name": "Laptop Pro",
"description": "High-performance laptop",
"price": 999.99,
"stock": 50,
"category": {
"id": 1,
"name": "Electronics"
},
"imageUrl": "https://..."
}
],
"page": 0,
"size": 10,
"totalElements": 100,
"totalPages": 10
}

Panier​

POST /api/cart/items
Authorization: Bearer <token>
Content-Type: application/json

{
"productId": 1,
"quantity": 2
}

Response 200:
{
"items": [
{
"id": 1,
"product": { "id": 1, "name": "Laptop Pro", ... },
"quantity": 2,
"price": 999.99,
"subtotal": 1999.98
}
],
"totalItems": 2,
"totalAmount": 1999.98
}

Commandes​

POST /api/orders
Authorization: Bearer <token>
Content-Type: application/json

{
"shippingAddress": "123 Main St, City, 12345"
}

Response 201:
{
"id": 1,
"status": "PENDING",
"items": [...],
"totalAmount": 1999.98,
"shippingAddress": "123 Main St, City, 12345",
"createdAt": "2024-01-15T10:30:00"
}

Tests Requis​

Tests Unitaires​

  • ProductService: CRUD operations
  • CartService: add, update, remove items
  • OrderService: create order, validate stock

Tests Integration​

  • ProductController: all endpoints
  • CartController: cart operations
  • OrderController: order workflow

Bonus Points​

FonctionnalitePoints
Cache Redis sur les produits+5
Notification email (simulation)+3
Recherche full-text+3
Export commandes CSV+2
Docker Compose complet+5
Swagger documentation+5

Estimation Temps​

TacheHeures
Setup projet et DB2
Entites et repositories4
Services metier6
Controllers REST4
Securite JWT4
Tests6
Documentation2
Bonus4-8
Total28-36

Retour au Projet Final