Mes Projets

Système de gestion de flotte (Tisseco)

NestJS React

Plateforme de gestion de flotte pour Tisseco, une entreprise engagée dans la collecte et la revente de vêtements à petits prix, intégrant la recherche géospatiale, l'import de données à grande échelle et une architecture NestJS production-ready (DDD).

Système de gestion de flotte (React + NestJS)

Un back-end pragmatique et solide

Tisseco collecte et revend des vêtements d’occasion dans des friperies, avec une forte mission environnementale et sociale (programmes de réinsertion professionnelle).
L’objectif : une plateforme de gestion et de suivi de leurs conteneurs de collecte de vêtements, offrant une traçabilité complète, des rapports détaillés et une interface publique pour la recherche de conteneurs et le signalement de problèmes.

Objectifs

  • Back-end production-ready avec des limites DDD claires
  • Suivi multi-entités : Sites → Zones → Conteneurs
  • Gestion de la création et du suivi des Tournées (pour définir le “programme” qu’un chauffeur doit suivre)
  • Recherche géospatiale avancée (PostGIS)
  • Imports CSV massifs fiables avec mise en file d’attente et reporting
  • QR codes pour des opérations terrain fluides
  • Déploiement et monitoring robustes

Architecture

  • Structure DDD : presentation/, application/, domain/, infrastructure/
  • Persistance : TypeORM (migrations, seeders)
  • Géospatial : PostgreSQL PostGIS (Haversine, ST_DWithin, polygones)
  • Traitement asynchrone : BullMQ pour les tâches lourdes (imports, emails)
  • Cache & rate limiting : Redis avec clés explicites et cache scopé par utilisateur
  • Mailing : Templates MJML
  • Tests : unitaires (Jest) + E2E transactionnels (rollback par test)
  • Observabilité : logs structurés + Netdata
  • Ops : Docker, Coolify (déploiement), GitHub Actions (CI/CD), sauvegardes AWS S3

Points forts

  • Boilerplate NestJS réutilisable avec conventions strictes : logging, gestion d’erreurs, validation .env, cache sécurisé
  • Recherche PostGIS par rayon ou polygone, avec filtres par type
  • Pipeline d’import CSV : staging, validation, mise en file (BullMQ), erreurs ligne par ligne, rapport par email
  • Stratégie de cache sans “caches zombies” via clés contrôlées (problème survenant avec les tags Redis)
  • Sécurité renforcée : guards, rôles, contrôle de cache par route et par utilisateur
  • UX terrain : QR codes sur les conteneurs pour scan rapide

Fonctionnalités

  • CRUD pour sites, zones, conteneurs
  • Recherche géospatiale (rayon, polygone, filtres par type)
  • Imports CSV haute volumétrie avec rapports détaillés
  • Auth & rôles (JWT), rate limiting, logs contextuels
  • Emails transactionnels avec templates MJML
  • Ops admin : déploiements automatisés, monitoring, sauvegardes S3

Défis & apprentissages

  • Résilience en charge : les imports pilotés par file d’attente évitent les verrous DB et maintiennent l’interface réactive
  • Isolation des règles métier : les règles du domaine sont testables sans base de données
  • Sécurité du cache : clés explicites et décorateurs scopés par utilisateur empêchent les mauvaises invalidations
  • Précision géospatiale : les fonctions PostGIS sont plus rapides et compatibles avec les index

Stack technique

Back-end : NestJS, TypeScript, TypeORM, PostgreSQL + PostGIS, BullMQ, Redis, JWT, MJML
Front-end : React, Vite, Tailwind + DaisyUI
Qualité : Jest (unitaires), tests E2E transactionnels
Ops : Docker, GitHub Actions, Coolify, Netdata, AWS S3

TypeScript TypeORM PostgreSQL PostGIS BullMQ Redis JWT MJML Jest E2E (transactionnel) Docker GitHub Actions Coolify Netdata AWS S3 React Vite Tailwind (DaisyUI) Zod TanStack Router TanStack Query TanStack Form