Architecture Technique Globale
La solution de cashback nouvelle génération
VUE D'ENSEMBLE DE L'ARCHITECTURE
1.1 Introduction
L'architecture technique de REWAPP est conçue selon les principes de scalabilité, haute disponibilité et sécurité. Elle repose sur une architecture microservices déployée sur infrastructure CapRover + Docker, permettant une évolutivité horizontale et une maintenance facilitée.
L'écosystème REWAPP comprend quatre composantes principales :
- Application Mobile : iOS/Android pour les clients finaux
- Site Vitrine : présentation de l'offre et inscription
- Dashboard Admin : gestion globale par l'équipe REWAPP
- Dashboard Partenaire : interface de gestion pour les commerçants
1.2 Principes Architecturaux
Principes Fondamentaux
| Principe | Description | Bénéfice |
|---|---|---|
| Architecture Microservices | Séparation des domaines fonctionnels en services indépendants | Évolutivité, maintenance facilitée |
| API-First | Toute communication passe par des APIs REST standardisées | Interopérabilité, testabilité |
| Cloud Native | Utilisation des containers Docker sur CapRover | Scalabilité automatique |
| Security by Design | Sécurité intégrée dès la conception à tous les niveaux | Conformité RGPD/PCI DSS |
| Event-Driven | Communication asynchrone entre services via Bull Queue (Redis) | Découplage, résilience |
1.3 Composants de l'Écosystème
1.3.1 Applications Clientes
Applications Frontend
| Application | Technologie | Version | Description |
|---|---|---|---|
| Application Mobile | Angular + Ionic |
20.x / 8.x | iOS et Android, gestion compte, QR code, historique |
| Site Vitrine | Angular + Ionic |
20.x / 8.x | SSR pour SEO optimal, inscription, liste partenaires |
| Dashboard Admin | Angular + Ionic |
20.x / 8.x | SPA avec authentification renforcée (2FA obligatoire) |
| Dashboard Partenaire | Angular + Ionic (PWA) |
20.x / 8.x | PWA pour scan QR, statistiques, configuration |
1.3.2 Services Backend
Stack Backend
| Composant | Technologie | Rôle |
|---|---|---|
| API Gateway | Kong / Traefik |
Point d'entrée unique, rate limiting, authentification |
| Services Métier | Node.js + NestJS |
Microservices métier |
| ORM | TypeORM |
Mapping objet-relationnel, migrations |
| Base de Données | PostgreSQL 15+ |
Stockage principal des données |
| Cache | Redis 7+ |
Sessions, cache, QR codes temporaires |
| Queue | Bull Queue (Redis) |
Communication asynchrone entre services |
ARCHITECTURE DÉTAILLÉE PAR COUCHE
2.1 Couche Présentation (Frontend)
2.1.1 Application Mobile (Angular + Ionic)
Architecture :
- Services Angular pour gestion d'état global
- Ionic Router pour la navigation native
- HttpClient Angular pour les appels API avec intercepteurs
- Ionic Storage pour persistance locale
- @capacitor/camera pour scan QR code
- @capacitor/push-notifications pour push notifications
Sécurité Mobile :
- Certificate Pinning pour éviter attaques MITM
- Stockage sécurisé des tokens (Keychain iOS / Keystore Android)
- Obfuscation du code en production
2.1.2 Site Vitrine (Angular 20)
Architecture :
- Single Page Application (SPA) Angular — pas de SSR/SSG
- Tailwind CSS pour styling responsive
- Optimisation images avec Angular CDK / lazy loading
- Integration Google Tag Manager pour analytics
Sections principales (scrollables) :
- Hero : CTA inscription app mobile
- Comment ça marche : 4 étapes du fonctionnement
- Avantages : proposition de valeur pour clients et commerçants
- Offre Pro : CTA inscription partenaire (redirect partner.rewapp.fr)
- Contact : formulaire contact
2.1.3 Dashboard Admin et Partenaire (Angular)
Architecture commune :
- Ionic Components pour composants professionnels
- NgRx Signals Store pour état global
- Chart.js / Recharts pour visualisations données
- WebSocket pour temps réel (scan QR, notifications)
- PWA avec Service Worker pour mode offline (Dashboard Partenaire)
2.2 Couche API Gateway
2.2.1 Traefik (API Gateway CapRover)
Configuration API Gateway
| Fonctionnalité | Configuration | Description |
|---|---|---|
| Rate Limiting | 100 req/min par utilisateur, 1000 req/min par IP |
Protection contre abus et DDoS |
| Authentication | Validation JWT (RS256) + refresh tokens |
Vérification identité à chaque requête |
| Load Balancing | Round-robin avec health checks |
Distribution équitable du trafic |
| Request Transform | Versioning API (v1, v2) |
Format standardisé des réponses |
| Logging | Centralisation vers Loki/Grafana |
Traçabilité complète des requêtes |
| Circuit Breaker | Seuil 50% erreurs sur 30s |
Protection contre cascading failures |
2.2.2 Structure des Endpoints API
/api/v1/auth/* → Auth Module (inscription, connexion, 2FA, social, tokens)
/api/v1/clients/me/* → Client Module (profil, points, QR codes, transactions, transfers, referrals)
/api/v1/partners/* → Partner Module (inscription, dashboard, scan QR, team, KYB)
/api/v1/admin/* → Admin Module (gestion partenaires, billing, stats, security, tiers)
/api/v1/notifications/* → Notifications Module (push, email)
/api/v1/webhooks/* → Webhooks Module (Plaid, Stripe)
/api/v1/siret → Siret Module (vérification SIRET/UAI)
2.3 Couche Services Métier (Backend)
2.3.1 Modules NestJS (Monolithe Modulaire)
Modules Backend
| Service | Responsabilités | Technologies |
|---|---|---|
| Auth Module | Authentification, JWT RS256, 2FA TOTP, social login (Google/Apple), gestion sessions | NestJS, Passport.js, Redis |
| Client Module | Profils, points, QR codes, transactions, transfers, bank accounts, referrals, events, feedback | NestJS, PostgreSQL |
| Partner Module | Dashboard partenaire, scan QR, statistiques, team management, KYB, promotions | NestJS, PostgreSQL |
| Admin Module | Gestion partenaires, transactions, billing, marketing, stats, security, subscription plans, tiers | NestJS, PostgreSQL |
| Plaid Module | OpenBanking via Plaid OAuth : lien compte, webhooks transactions, token management | NestJS, Plaid SDK |
| Payment Module | Traitement virements SEPA, gestion withdrawals | NestJS, Stripe |
| Webhooks Module | Réception webhooks Plaid et Stripe pour détection transactions | NestJS, Bull Queue |
| Notifications Module | Push notifications, email transactionnels | NestJS, Bull Queue |
| Siret Module | Vérification SIRET/UAI pour onboard partenaire | NestJS, API Entreprise |
2.3.2 Communication Inter-Modules
Communication Synchrone (Appels directs) :
- Tous les modules partagent la même base PostgreSQL
- Appels de services via injection de dépendances NestJS (même process)
- Timeout applicatif : 5 secondes par défaut
Communication Asynchrone (Bull Queue / Redis) :
- Events :
transaction.created,points.credited,user.registered,kyb.approved - Queues durables avec acknowledgment
- Dead Letter Queue pour messages en échec
- Webhooks : Plaid (transactions), Stripe (paiements)
2.4 Couche Données
2.4.1 PostgreSQL 15+ (Base Principale)
Configuration :
- Extensions activées : UUID-OSSP, pg_trgm (recherche texte)
- Master-Replica replication pour haute disponibilité
- Backup automatique quotidien avec rétention 30 jours
- Connection pooling avec PgBouncer
Tables Principales :
users: profils utilisateursmerchants: informations commerçantstransactions: historique achats détectéspoints_ledger: journal des mouvements de pointsaccounts: comptes OpenBanking liés (tokens Plaid uniquement)withdrawals: demandes de virement bancaireloyalty_tiers: configuration paliers par commerçantqr_codes: QR codes générés (TTL 15 minutes)notifications: historique notifications
2.4.2 Redis 7+ (Cache et Sessions)
Utilisation Redis
| Usage | Clé | TTL | Description |
|---|---|---|---|
| Sessions utilisateurs | session:{userId} |
24h | Données de session JWT |
| Cache API | cache:api:{endpoint}:{params} |
Variable | Réponses API fréquentes |
| QR codes | qr:{code} |
15 min | QR codes temporaires (règle métier) |
| Points bloqués | locked:{userId}:{qrCode} |
60s | Points réservés pendant génération QR |
| Rate limiting | rate:{ip} ou rate:{userId} |
60s | Compteurs de requêtes |
| Pub/Sub | channel:notifications |
- | WebSocket temps réel |
INFRASTRUCTURE CLOUD (CAPROVER)
3.1 Services Infrastructure CapRover
Services Docker
| Service | Utilisation | Configuration |
|---|---|---|
| Docker Containers | Containers microservices | Auto-scaling via CapRover |
| PostgreSQL Container | Base de données principale | PostgreSQL 15+, volumes persistants |
| Redis Container | Cache, sessions, queues | Redis 7+, Cluster mode |
| MinIO / Volume local | Stockage objets (images, documents) | Versioning, volumes persistants |
| Nginx/Traefik | CDN assets statiques | Let's Encrypt HTTPS |
| Traefik Load Balancer | Load Balancer | HTTPS termination, health checks |
| DNS externe | DNS | Cloudflare ou autre fournisseur |
| Prometheus + Grafana | Logs et monitoring | Métriques, alertes, dashboards |
| Variables d'env CapRover | Gestion secrets | API keys, credentials |
| Traefik middleware | Pare-feu applicatif | Protection OWASP Top 10 |
3.2 Architecture Réseau (réseau interne serveur)
3.2.1 Configuration réseau interne serveur
réseau interne serveur CIDR : 10.0.0.0/16
Réseaux publics : 10.0.1.0/24, 10.0.2.0/24 (redondant a et b)
Réseaux privés App : 10.0.10.0/24, 10.0.11.0/24 (redondant)
Réseaux privés Data: 10.0.20.0/24, 10.0.21.0/24 (redondant)
NAT Gateway : Accès internet sortant pour réseaux internes privés
Docker Network : Réseau interne containers CapRover
3.2.2 Security Groups
Security Groups
| Security Group | Port | Source | Description |
|---|---|---|---|
ALB-SG |
443 | 0.0.0.0/0 |
HTTPS public |
App-SG |
3000 | ALB-SG |
Trafic depuis ALB uniquement |
DB-SG |
5432 | App-SG |
PostgreSQL depuis apps uniquement |
Redis-SG |
6379 | App-SG |
Redis depuis apps uniquement |
Bastion-SG |
22 | IP admin |
Accès SSH restreint |
3.3 Configuration par Environnement
Environnements
| Environnement | URL | Instances | Database | Redis |
|---|---|---|---|---|
| Dev | dev.api.rewapp.fr |
t3.small x 1 | db.t3.micro | cache.t3.micro |
| Staging | staging.api.rewapp.fr |
t3.small x 2 | db.t3.small | cache.t3.micro |
| Production | api.rewapp.fr |
t3.medium x 4 (auto-scale 2-10) | db.t3.medium redondant | cache.t3.small Cluster |
SÉCURITÉ DE L'ARCHITECTURE
4.1 Chiffrement des Données
4.1.1 Chiffrement au Repos
- PostgreSQL : Encryption via volumes Docker (AES-256)
- MinIO/Stockage : Encryption des volumes (AES-256)
- Docker Volumes : Encrypted by default
- Redis Container : Encryption at-rest activé
4.1.2 Chiffrement en Transit
- TLS 1.3 minimum pour toutes les communications
- Certificate Pinning sur application mobile
- OpenBanking OAuth : intégration via Plaid OAuth (pas de partage credentials)
- HTTPS obligatoire (HTTP redirection 301)
4.2 Authentification et Autorisation
4.2.1 Stratégie JWT (RS256)
Configuration JWT
| Token | Durée de Validité | Stockage | Usage |
|---|---|---|---|
| Access Token | 15 minutes | Mémoire (mobile), HttpOnly cookie (web) | Authentification requêtes API |
| Refresh Token | 7 jours | Keychain/Keystore (mobile), HttpOnly cookie (web) | Renouvellement access token |
Claims JWT :
sub: userId uniquerole: user, merchant, admin, superadminpermissions: tableau de permissions granulairesdeviceId: identifiant device pour détection fraudeexp: timestamp expiration
4.2.2 RBAC (Role-Based Access Control)
Rôles et Permissions
| Rôle | Accès | Permissions |
|---|---|---|
| User | App Mobile | Consultation solde, génération QR, demande virement |
| Merchant | Dashboard Partenaire | Scan QR, statistiques, configuration cashback |
| Admin | Dashboard Admin | Gestion utilisateurs, partenaires, modération |
| SuperAdmin | Dashboard Admin | Accès complet, configuration système, suppression |
4.2.3 2FA (Authentification à Deux Facteurs)
Configuration 2FA
OBLIGATOIRE pour : Dashboard Admin (tous les rôles)
OPTIONNEL pour : App Mobile, Dashboard Partenaire
Méthodes supportées : TOTP (Google/Microsoft Authenticator)
4.3 Protection contre les Attaques
4.3.1 Protection OWASP Top 10
Mesures de Protection
| Vulnérabilité | Mesure de Protection |
|---|---|
| Injection SQL | Requêtes préparées via TypeORM, validation inputs |
| XSS | Content Security Policy (CSP), sanitization HTML, HttpOnly cookies |
| CSRF | Double Submit Cookies, SameSite=Strict |
| IDOR | UUID v4 non prédictibles, vérification ownership systématique |
| Broken Authentication | Rate limiting login, lockout après 5 tentatives, 2FA |
| Security Misconfiguration | Hardening serveurs, headers sécurité (HSTS, X-Frame-Options) |
| Insufficient Logging | Audit trail complet, alertes temps réel |
4.3.2 Protection DDoS et Rate Limiting
- Cloudflare/Traefik : Protection DDoS layer 3/4
- Traefik Middleware : Filtrage requêtes malveillantes layer 7
- Rate Limiting API Gateway :
100 requêtes/minute par utilisateur authentifié
1000 requêtes/minute par IP
5 tentatives de login/heure par compte
4.3.3 Sécurité QR Code
RÈGLE MÉTIER
QR Code valide 15 minutes, usage UNIQUE
- Signature HMAC-SHA256 avec clé secrète
- Points BLOQUÉS dès génération du QR code
- Validation côté serveur obligatoire avant débit
- Détection tentatives de replay (code déjà utilisé)
PERFORMANCE ET SCALABILITÉ
5.1 Stratégies de Cache
5.1.1 Cache Multi-Niveaux
Architecture de Cache
| Niveau | Technologie | Données Cachées | TTL |
|---|---|---|---|
| CDN | Nginx/Traefik |
Assets statiques (images, CSS, JS) | 1 an (versionné) |
| Application | Redis |
Réponses API fréquentes | Variable (5min - 1h) |
| Database | PostgreSQL Query Cache |
Requêtes complexes | Automatique |
5.1.2 Stratégies d'Invalidation
- TTL adaptatif : court pour données volatiles, long pour données stables
- Event-driven invalidation : invalidation cache lors de mise à jour données
- Cache warming : pré-chargement données fréquentes au démarrage
5.2 Scaling Docker containers
5.2.1 Scaling Horizontal (Docker CapRover)
Règles d'Scaling Docker containers
| Métrique | Seuil Scale-Out | Seuil Scale-In | Min/Max Tasks |
|---|---|---|---|
| CPU Utilization | > 70% | < 30% | 2 / 10 |
| Memory Utilization | > 80% | < 40% | 2 / 10 |
| Request Count | > 1000 req/min | < 500 req/min | 2 / 10 |
Cool-down
300 secondes entre actions de scaling
5.2.2 Scaling Database
- Read Replicas : Répartition charge lectures sur replicas
- Connection Pooling : PgBouncer pour optimiser connexions
- Partitioning : Tables volumineuses partitionnées par date (transactions)
5.3 Optimisations
5.3.1 Optimisations Backend
- Pagination curseur pour grandes listes (évite OFFSET)
- DataLoader pattern pour éviter N+1 queries
- Batch processing pour opérations lourdes (Bull Queue)
- Lazy loading des relations TypeORM
5.3.2 Optimisations Frontend
- Code splitting et lazy loading des routes
- Optimisation images : WebP, compression, responsive
- Service Worker pour cache offline (Dashboard Partenaire PWA)
- Bundle size cible : < 200KB gzipped
5.3.3 Objectifs de Performance
MONITORING ET OBSERVABILITÉ
6.1 Stack de Monitoring
6.1.1 Métriques (Prometheus + Grafana)
- Métriques système : CPU, RAM, Disk, Network
- Métriques application : Requêtes/s, Latence, Taux d'erreur
- Métriques business : Transactions/jour, Points crédités, Conversions QR
- Dashboards personnalisés par équipe (Dev, Ops, Business)
6.1.2 Logs Centralisés (Loki / CapRover Logs)
Structure des logs (JSON) :
{
"timestamp": "2025-11-24T10:30:00.000Z", // Horodatage ISO 8601
"level": "INFO", // INFO, WARN, ERROR, DEBUG
"service": "rewapp-api", // Nom du service backend (monolithe modulaire)
"requestId": "req_abc123xyz", // Identifiant unique de requête
"userId": "usr_456def", // Utilisateur concerné (si applicable)
"message": "User authenticated successfully",// Description de l'événement
"metadata": { // Données contextuelles
"ip": "192.168.1.1",
"userAgent": "REWAPP-Mobile/1.0"
}
}
6.1.3 APM (Application Performance Monitoring)
- Request tracing : Suivi requêtes via intercepteurs NestJS
- Real User Monitoring (RUM) : Performance côté client
- Profiling : Identification goulots d'étranglement
- Error tracking : Sentry pour capture et analyse erreurs
6.2 Alerting
Seuils d'Alertes
| Métrique | Seuil Warning | Seuil Critical | Action |
|---|---|---|---|
| API Latency P95 | > 300ms | > 500ms | Notification Slack |
| Error Rate | > 0.5% | > 1% | PagerDuty (astreinte) |
| CPU Usage | > 70% | > 85% | Auto-scaling + alert |
| Database Connections | > 70% | > 85% | Investigation immédiate |
| Disk Usage | > 70% | > 85% | Nettoyage + extension |
| Failed Login Attempts | > 10/min | > 50/min | Blocage IP + investigation |
CI/CD PIPELINE
7.1 Pipeline de Déploiement
7.1.1 Outils
Stack CI/CD
| Outil | Usage |
|---|---|
| GitHub | Source Control, code reviews |
| GitHub Actions | CI/CD automation |
| Docker Registry privé | Registry images Docker |
| Terraform | Infrastructure as Code (IaC) |
| CapRover Config | Configuration par environnement |
7.1.2 Workflow CI/CD
1. Commit et Push
Développeur pousse sur feature branch
2. Tests automatiques
Unit tests, integration tests, linting, security scan
3. Build Docker
Construction image et push vers Docker Registry privé
4. Deploy Staging
Déploiement automatique sur environnement staging
5. Tests E2E
Tests end-to-end avec Cypress
6. Approval
Review manuelle obligatoire pour production
7. Deploy Production
Blue-Green deployment avec rollback automatique si erreur
7.2 Environnements
Stratégie de Branches
| Environnement | Branche | Déploiement | Approbation |
|---|---|---|---|
| Dev | develop |
Automatique (push) | Non |
| Staging | main |
Automatique (merge) | Non |
| Production | main + tag |
Manuel | Oui (2 reviewers) |
INTÉGRATIONS TIERCES
8.1 Solution Bancaire (Card Linking)
8.1.1 Fournisseur Recommandé : Plaid
Fonctionnalités Plaid
| Fonctionnalité | Description |
|---|---|
| OpenBanking (Plaid OAuth) | Liaison compte via OAuth Plaid (pas de credentials partagés) |
| Transaction Detection | Webhooks temps réel pour achats détectés |
| Merchant Identification | Identification automatique du commerçant |
| PCI DSS Compliance | Aucune donnée carte stockée (Plaid gère l'OpenBanking, Stripe les paiements) |
Provider
Plaid (actuel)
8.1.2 Webhooks Bancaires (Plaid)
ITEM: Item Plaid lié (nouveau compte OpenBanking)ITEM_USER_PERMISSION_REVOKED: Permissions révoquées par l'utilisateurTRANSACTIONS_SYNC: Nouvelles transactions détectées via PlaidTRANSACTIONS_REMOVED: Transactions supprimées/mises à jour
8.1.3 Virements Bancaires
Provider Paiement
Stripe (actuel)
- API Stripe pour initiation virements SEPA
- Réconciliation automatique via webhooks Stripe
- Délai standard SEPA : 1-2 jours ouvrés
8.2 Services de Communication
8.2.1 Notifications Push (Firebase Cloud Messaging)
Types de Notifications
| Type Notification | Déclencheur | Exemple |
|---|---|---|
| Transaction détectée | Webhook bancaire | +15 points chez Boulangerie Martin ! |
| Points crédités | Validation transaction | Vos 15 points sont disponibles |
| Expiration points | J-30, J-7 avant expiration | 50 points expirent dans 7 jours |
| Promotion | Admin/Merchant dashboard | Double points chez nos partenaires ce weekend ! |
| Virement effectué | Confirmation virement | Virement de 19,00€ effectué |
8.2.2 Email (SendGrid)
- Templates transactionnels : Confirmation inscription, réinitialisation mot de passe
- Templates marketing : Newsletter, promotions (opt-in)
- Bounce handling et suppression automatique
- Suivi delivery et open rates
8.2.3 SMS (Twilio)
- Usage : Alertes transactionnelles, notifications partenaires
- Opt-out management RGPD compliant
- Fallback si échec push notification
8.3 Analytics et Tracking
8.3.1 Google Analytics 4
Événements trackés :
signup_started,signup_completedcard_linkedtransaction_detectedqr_generated,qr_scannedwithdrawal_requested,withdrawal_completed
8.3.2 Mixpanel
- Funnel analysis : Inscription → Liaison carte → 1ère transaction
- Cohort retention analysis : Rétention J7, J30, J90
- A/B testing framework pour optimisation UX
8.3.3 Sentry (Error Tracking)
- Capture automatique des erreurs frontend et backend
- Stack traces avec contexte utilisateur
- Alertes temps réel sur nouvelles erreurs
- Release tracking pour corrélation erreurs/déploiements
CONCLUSION
9.1 Récapitulatif de l'Architecture
L'architecture technique de REWAPP a été conçue pour répondre aux exigences de scalabilité, performance et sécurité d'une plateforme de cashback moderne.
Synthèse des Choix Techniques
| Axe | Solution Retenue | Bénéfice |
|---|---|---|
| Scalabilité | Microservices + Auto-scaling Docker | Support 30K → 300K utilisateurs |
| Performance | Cache multi-niveaux + CDN | Temps de réponse < 200ms |
| Sécurité | Chiffrement AES-256 + JWT RS256 + 2FA | Conformité RGPD/PCI DSS |
| Résilience | redondant + Circuit Breaker | Disponibilité 99.9% |
| Observabilité | Prometheus/Grafana + Sentry | Monitoring proactif |
9.2 Points Clés
- Architecture cloud-native sur CapRover + Docker
- Microservices découplés avec NestJS
- Base PostgreSQL avec TypeORM
- Cache Redis pour performance et sessions
- Bull Queue pour traitement asynchrone
- Sécurité intégrée (Security by Design)
- CI/CD automatisé avec GitHub Actions
- Monitoring complet avec alerting
9.3 Évolutions Futures Prévues
L'architecture est conçue pour supporter les évolutions suivantes :
- Migration Kubernetes : Orchestration avancée pour phase de scale
- GraphQL API : Flexibilité accrue pour les clients
- Machine Learning : Détection fraude et recommandations personnalisées
- Multi-région : Expansion européenne (Belgique, Suisse)
Conclusion
Cette architecture technique constitue une base solide pour le développement et la croissance de REWAPP, garantissant une expérience utilisateur optimale tout en maintenant les standards les plus élevés en termes de sécurité et de performance.