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).

Besoin métier : Gérer efficacement une flotte de conteneurs dispersés sur le territoire, avec suivi en temps réel, planification des tournées de collecte, et signalement citoyen pour les conteneurs pleins ou endommagés.

Solution technique : Plateforme complète intégrant recherche géospatiale (trouver les conteneurs à proximité), imports CSV massifs (mise à jour rapide des données terrain), et interface publique pour l’engagement citoyen.

Bénéfices :

  • Traçabilité complète de la chaîne de collecte
  • Optimisation des tournées grâce à la géolocalisation
  • Réduction des erreurs de saisie via imports automatisés
  • Amélioration de l’expérience utilisateur pour les citoyens cherchant un point de collecte

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