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