Présentation
Projet d’entraînement visant à explorer la conception d’un e-shop moderne. Conçu pour évoluer, il sera amélioré de manière itérative et adapté à divers environnements technologiques.
Nous adopterons ici la Clean Architecture, un excellent terrain d’expérimentation pour ce type d’approche. Cela permettra d’en observer les atouts et les limites face à des architectures plus classiques, comme les modèles monolithiques ou en couches.
Fonctionnalités
Espace B2C
Fonctionnalités MVP
- Catalogue de produits
- Fiche de produit
- Gestion d'un panier
- Recherche simple (nom, catégorie)
- Filtrage et tri (prix, popularité, nouveauté)
- Indication de stock (visuelle)
- Accessibilité (ARIA), i18n (FR/EN)
Fonctionnalités supplémentaires
- Création d'un compte client (email + password, OAuth en option)
- Gestion d'un compte client (profil, adresses multiples)
- Livraison et paiement (flux simulé / sandbox)
- Suivi de commandes (statuts)
- Historique de commandes
- Notifications (email/simulations, centre de notifications)
- Recommandations basiques (produits similaires)
Fonctionnalités avancées
- Multi‑devise (affichage), taxes de base (TVA simulée)
- Gestion de listes d'achats / listes cadeaux
- Produits numériques (licences, liens de téléchargement)
- Avis et notes produits (modération côté admin)
- Système de fidélité (points, paliers, récompenses)
- Abonnements / réapprovisionnement automatique (abonnements simulés)
- Personnalisation produit (options, configurateur simple)
- Pages auteurs et marques
- Recommandations par scoring (client‑side) et A/B testing de vitrines
- Recherche avancée (facettes : prix, marque, note, disponibilité)
- Multi‑entrepôts / stocks (vue agrégée simulée)
- Livraison avancée (règles par poids/zone, pick‑up point simulé)
- Paiements avancés (capture différée, 3‑DS simulé)
Fonctionnalités d'administration
- Comptes de gestion et rôles/permissions (admin, manager, support)
- Gestion dynamique du catalogue de produits (CRUD, import/export CSV)
- Gestion des rayons / catégories de produits, attributs et variantes (taille, couleur)
- Gestion du support client (tickets simples, macros de réponse)
- Gestion des expéditions et des statuts de commande (prépa, expédiée, livrée, annulée)
- Gestion des retours (RMA) et des remboursements (totaux/partiels)
- Coupons / codes promo, règles de prix (par catégorie/produit)
- Mini‑CMS (pages légales, CGV, FAQ, blog léger)
- Tableau de bord analytique (ventes, conversion, produits vus, retours)
- Journal d'audit (actions back‑office)
Espace B2B
Fonctionnalités MVP
- Création d'un compte vendeur (onboarding guidé)
- Gestion du catalogue (CRUD produits)
- Suivi des ventes et revenus (mini dashboard)
- Personnalisation de la vitrine (logo, bannière, description)
Fonctionnalités addtionnelles
- Import/export CSV ou Excel pour les produits
- Statistiques de vente (par période, par produit)
- Gestion des promotions vendeur (réductions spécifiques)
- Messagerie interne (client ↔ vendeur ou vendeur ↔ support)
- Politique de retour personnalisée
Fonctionnalités avancées
- Intégration API externe (ERP, logistique, paiement)
- Multi-boutique (un vendeur = plusieurs marques)
- Gestion des marges, commissions et reversements automatiques
- Label "vendeur premium" ou notation publique
Fonctionnalités d'administration
- Validation manuelle ou automatique des nouveaux vendeurs
- Suspension / suppression de comptes
- Modération des fiches produits
- Rapports de performance vendeurs
- Support multi-canal (tickets, e-mail, chat)
Socle technique
Stack B2C Node.js
Frontend
- Frameworks : React, Vue, Angular
- Routing : React Router / Vue Router / Angular Router
- SSR/SSG (option) : Next.js / Nuxt / Angular Universal
- State :
- React: Context API → Redux Toolkit
- Vue : Pinia + TanStack Query (server state)
- Angular : NgRx (store/effects) ou Signals + Query libs (RxJS), façade par feature
- Formulaires et Validation :
- React : React Hook Form
- Vue : VeeValidate + Zod
- Angular : Reactive Forms, Validators, Formly (option)
- UI/Styles :
- React : TailwindCSS + shadcn/ui (React)
- Vue : PrimeVue
- Angular : Angular Material (MDC) ou Taiga UI / PrimeNG / NG‑ZORRO
- i18n et A11y :
- i18next (React/Vue)
- Angular i18n ou ngx-translate (Angular), ARIA, dark mode
- Build/Tooling :
- Vite (React/Vue)
- Angular CLI (Vite under the hood), SWC/TS, ESLint + Prettier, angular-eslint
- Monorepo (option) :
- Nx (apps React/Vue/Angular + Node dans le même repo)
- Mocking et Design System (option) :
- MSW (API),
- Storybook (React/Vue/Angular)
Backend
- Runtime : Node
- Framework : NestJS (modules, DI)
- Langage : TypeScript strict (tsconfig base + paths)
- API : REST + OpenAPI/Swagger (zod-to-openapi ou @nestjs/swagger)
- Sécurité : Helmet, CORS, rate‑limit, compression, CSRF (si cookies)
- Auth : JWT (access+refresh, cookies HttpOnly), OAuth2 (Google/GitHub) option
- Validation : Zod (schemas d'input + parsing env)
- Logs : pino (JSON), pino-http, pino-pretty (dev)
- Cache/Session : Redis (panier invité, sessions, rate‑limit)
- Fichiers : Upload signé vers S3/MinIO (images produits), sharp (thumbnails)
- Email : nodemailer + MailHog en dev
- Paiement (sandbox) : Stripe (test), webhook simulé
- Recherche : Meilisearch (facettes, typo tolerance) — option
- Messaging : RabbitMQ/Redpanda (option : commandes, retours)
Database
- DB : PostgreSQL, Redis
- ORM : Prisma (migrations, seed), (Drizzle en alternative)
- Migrations/Seed : prisma migrate, prisma db seed + fichiers fixtures réalistes
- Indexation : index SQL sur champs de recherche/tri
Tests et Qualité
- Unitaires :
- Vitest + Testing Library (React/Vue)
- Jest + @testing-library/angular (Angular)
- Intégration :
- Supertest (Express/Nest)
- Testcontainers Node (Postgres/Redis/Meili)
- E2E : Playwright (ou Cypress si préférence)
- Qualité : ESLint, Prettier, commitlint + lint‑staged, Husky (pre‑commit)
DevOps
- Docker : Docker Compose (Postgres, PgAdmin, Redis, Kafka, MailHog, Meilisearch, MinIO)
- CI/CD : GitHub Actions (lint, type‑check, tests, build)
- Images : Build multi‑stage Node, ou Bun pour tooling rapide (option)
- Config : .env + zod pour typer les variables d'environnement
- Observabilité : métriques Prometheus (express-prom-bundle), traces OpenTelemetry (option)
- CDN : cache statique (images, assets) — simulé localement
Patterns et Structure
- Architecture : services/repositories + contrôleurs, ports/adapters light
- Feature Folders : catalog/, cart/, account/, orders/, vendor/
- Erreurs : objets d'erreur typed (ZodError → 422), mapping global
- Perf : pagination cursor‑based, ETag/If‑None‑Match, caching côté client
Stack B2B Java
Frontend
- Framework :
- Spring Boot 3.3+ (Spring MVC classique pour l'e-commerce)
- Spring Security
- Spring Data JPA
- Validation : Jakarta Validation (Bean Validation)
- Mapping : MapStruct
Backend
- JDK : Eclipse Temurin 21 LTS (OpenJDK)
- Build : Gradle (Kotlin DSL) + Version Catalogs
- Auth : JWT (stateless) ; Keycloak (option) pour SSO/RBAC avancé
- Paiement (sandbox) : Stripe test mode
- Mail : MailHog (dev)
Database
- DB : PostgreSQL (OLTP), Redis (sessions/panier/cache)
- Migrations : Flyway
Tests et Qualité
- Tests : JUnit 5, Testcontainers (Postgres, Redis, Keycloak), REST-assured, WireMock
- Qualité : Spotless (format), Checkstyle/ErrorProne (option), OWASP Dependency Check
DevOps
- Observabilité : Micrometer + Prometheus + OpenTelemetry (traces), Logback JSON
- Packaging : Jib (build d'images Docker sans Dockerfile)
- Messaging (option) : RabbitMQ (commandes/retours), ou Kafka/Redpanda si tu veux l'event-driven
- Recherche (option) : Meilisearch (facettes/typo-tolerance) ou OpenSearch
- Stockage fichiers : MinIO (S3-compatible)
Architecture B2C
Principes
- Séparation claire :
- Présentation
- Application (use‑cases)
- Domaine (modèle)
- Infrastructure (adapters)
- Domaines fonctionnels :
- Découverte (home, catégories, recherche)
- Catalogue & Produit
- Panier
- Checkout
- Compte & Adresses
- Commandes
- Avis
- Contenus CMS
- Extensibilité : points d'extension pour passer en marketplace (multi‑vendeurs) sans casser le B2C.
Couches
- Présentation : SPA/SSR (Web), routes publiques/privées, i18n & a11y, état UI local minimal.
- Application (use‑cases) : orchestration métier (ex. AddItemToCart, PlaceOrder, SubmitReview).
- Domaine : entités et règles (Product, Price, Cart, Order, Customer, Address, Review).
- Infrastructure : persistance (DB), cache, fichiers (images), messagerie, moteurs de recherche, passerelles paiement/livraison.
Contextes & frontières
- Découverte : pages listes, recherche, facettes → lit depuis Catalogue et Search.
- Catalogue & Produit : lecture optimisée, variantes/attributs, disponibilité indicatives.
- Panier : agrégat Cart (lignes, quantité, totaux) — tolérant aux incohérences temporaires (prix/stock recalculés au checkout).
- Checkout : validation adresse, frais de livraison, taxes, paiement → commande créée (idempotence).
- Compte : profil, adresses, préférences.
- Commandes : suivi statuts; lecture orientée timeline (événements).
- Avis : création/modération; calculs agrégés en lecture.
- CMS : pages légales/FAQ; agnostique du cœur e‑commerce.
Flux majeurs
- Parcours achat : Découverte → Produit → Panier → Checkout → Confirmation → Suivi de commande.
- Synchronisation prix/stock : lecture « best‑effort » côté catalogue, re‑validation stricte au paiement.
- Avis : après livraison → création → modération → publication.
API & BFF
- API publique centrée ressources (REST) :
- GET /products
- POST /cart/items
- POST /orders
- GET /orders/
{id}
- BFF (option) pour agréger des données multi‑sources et adapter aux besoins front (anti‑corruption layer vers B2B/tiers).
Données & lecture/écriture
- Écriture stricte (transactions locales) pour panier/commande/compte.
- Lecture optimisée : pagination, tri, facettes, projections « cartes produit ».
- Cache : CDN/images, cache applicatif (catalogue), ETags/If‑None‑Match pour listes.
Sécurité & conformité
- Auth client (session/JWT), RBAC simple (USER/ADMIN).
- Protection des actions critiques (checkout) : idempotency key, limite de débit, validation forte.
- RGPD : data minimization, export/suppression compte, consentement cookies.
Observabilité
- Métriques produit (vues, conversion panier→commande)
- Journaux corrélés (traceId)
- Alertes basiques (taux d'échec paiement)
- Multi‑canal
- Web d'abord, prêt pour mobile / PWA (offline panier) et pour un canal vitrines (affiliés/embeds) via API lecture sécurisée.
Architecture technique
- Front : SSR/CSR au choix (référencement vs vitesse), routage par domaines fonctionnels.
- Back : API REST couche application claire, contrats documentés (OpenAPI).
- Recherche : index dédié (facettes/typo tolerance) pour la découverte.
- Fichiers : stockage objet (images produits), dérivés (thumbnails) asynchrones.
- Messagerie (option) : événements OrderPlaced, ReviewSubmitted pour analytics et emails.
Infrastructure
- Dev : environnement dockerisé (DB, cache, mail, search).
- Prod : images immuables, variables secrètes, sauvegardes DB, CDN pour médias.
- Scalabilité : lecture horizontale (catalogue/search), écriture protégée (checkout), files d'attente pour traitements non‑critiques.
Architecture B2B
Principes
- Marketplace centric : le client achète chez plusieurs vendeurs via une expérience unifiée.
- Séparation des responsabilités :
- Portail vendeur (opérations)
- Portail admin (gouvernance)
- API publique restreinte
- Bounded contexts :
- Vendeur
- Catalogue Vendeur
- Commandes & Fulfillment
- Retours/RMA
- Reversements & Settlement
- Support
- Consistance locale, coordination par événements :
- Transactions par contexte
- Orchestration par sagas pour les flux transverses (commande → expédition → reversement).
- Multi‑tenant : isolation stricte des données par sellerId (politiques d'accès + segmentation des données).
Couches
- Présentation : Portail Vendeur (gestion vitrine, produits, commandes), Admin (validation, modération, finances).
- Application (use‑cases) : règles d'orchestration par contexte (ex. SubmitProductForReview, AcceptOrder, MarkAsShipped, CreatePayout).
- Domaine : agrégats stables (Seller, Product, Order, RMA, Payout) et invariants (commissions, statuts).
- Infrastructure : persistance, index de recherche, stockage fichiers, messagerie d'événements, intégrations paiement/logistique.
Contextes & frontières
- Vendeur : onboarding, statut (PENDING/ACTIVE/SUSPENDED), équipe & rôles, vitrine/politiques.
- Catalogue Vendeur : produits, variantes, prix, stock ; workflow Brouillon → Revue → Publié (modération).
- Commandes & Fulfillment : commandes « éclatées » par vendeur, préparation, expédition (tracking), litiges.
- Retours/RMA : demandes, approbation, réception, remboursement, réintégration de stock.
- Reversements & Settlement : calcul commissions, clôture de période, reversement, justificatifs.
- Support : tickets, messages, SLA, escalade admin.
Flux majeurs
- Onboarding vendeur : inscription → vérifications → activation → attribution d'un plan de commission par défaut.
- Publication produit : création brouillon → soumission → validation admin → publication & indexation recherche.
- Commande multi‑vendeurs : commande client → split par vendeur → acceptation → préparation → expédition → complétion.
- Retour & remboursement : demande client → approbation → réception → remboursement → mise à jour commande & stock.
- Reversements : clôture de période → calcul commissions → génération reversements → paiement → rapport de settlement.
API & Portails
- API Vendeur (authentifiée) : accès limité au périmètre du vendeur (produits, commandes, retours, stats).
- API Admin : validation vendeurs/produits, modération, finances.
- API Publique : lecture « vitrine marketplace » (produits publiés, vendeurs visibles) — sans données sensibles.
- BFF (option) : adaptation des données multi‑sources pour les portails.
Données & multi‑tenant
- Ownership par contexte : un vendeur possède son catalogue et ses commandes « part vendeur ».
- Isolation : clé sellerId partout (indexation, filtres d'accès), logs/audits corrélés.
- Lecture optimisée : projections pour listes (produits, commandes) et tableaux de bord.
Sécurité & conformité
- RBAC/ABAC :
- rôles par vendeur (admin/agent),
- rôles marché (market_admin/support) ;
- politiques "resource.sellerId == principal.sellerId".
- Auditabilité : journal des actions sensibles (publication, remboursement, reversement).
- Protection : idempotency keys (paiement/remboursement), limites de débit, validation forte.
- RGPD : minimisation côté vendeur (données clients limitées au strict nécessaire).
Observabilité & SLA
- Métriques clés :
- Taux d'acceptation commande,
- Délais de préparation/expédition,
- Taux de retour,
- Délai reversement.
- Traçabilité : corrélation inter‑contextes (traceId), dashboards par vendeur et global marketplace.
Extensibilité & intégrations
- Intégrations modulaires : paiement, carriers, recherche, KYC — interchangeables par adapter.
- Évolution :
- Ajout de multi‑boutique par vendeur,
- Devis/PO entreprise,
- API webhooks vendeurs sans briser le noyau.
Architecture technique
- Portails dédiés (Vendeur/Admin) séparés du front B2C ; contrats API documentés.
- Index de recherche pour catalogues vendeurs & filtres.
- Messagerie d'événements pour les sagas (commande, retour, reversement).
- Stockage objet pour médias produits & pièces jointes (RMA, justificatifs).
Infrastructure
- Dev : environnements isolés par contexte (DB, cache, mail, search).
- Prod : politiques d'accès par vendeur, sauvegardes/archivage légal, journaux d'audit inviolables.
- Scalabilité : montée horizontale des portails & de la lecture, files pour tâches longues (exports, indexation).
Backlog
Cliquez sur le numéro de la story pour accéder au Github.
Cliquez sur le statut pour voir la démo si disponible.
B2C MVP
| # | Story | Statut |
|---|---|---|
| 001-01 | Next.js, Nest.js, Tests, PostgreSQL, PgAdmin, Redis, Docker | Done |
| 001-02 | Nuxt, PgAdmin, Swagger, Tests | Done |
| 002-01 | Homepage, Catalog, Product | Done |
| 003-01 | Admin, Profile, Catalog | Done |
B2B MVP
| # | Story | Statut |
|---|---|---|
| 001-01 | Angular, Java, PostgreSQL, PgAdmin, Redis, Docker | Done |
| 002-01 | Frontend: Login, Dashboard, UI Layout | Done |
| 003-01 | Admin: Login, Dashboard, UI Layout | Done |