v1.0 Novembre 2025
4.1

Architecture Technique Globale

La solution de cashback nouvelle génération

24 novembre 2025
Version 1.0
1

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
2

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 Routes
/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 utilisateurs
  • merchants : informations commerçants
  • transactions : historique achats détectés
  • points_ledger : journal des mouvements de points
  • accounts : comptes OpenBanking liés (tokens Plaid uniquement)
  • withdrawals : demandes de virement bancaire
  • loyalty_tiers : configuration paliers par commerçant
  • qr_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
3

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

Configuration Réseau
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
4

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 unique
  • role : user, merchant, admin, superadmin
  • permissions : tableau de permissions granulaires
  • deviceId : identifiant device pour détection fraude
  • exp : 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 :
Configuration Rate Limiting
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é)
5

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

< 200ms Temps de réponse API (P95)
99.9% Disponibilité annuelle
< 100ms Time to First Byte
< 2.5s LCP (Core Web Vital)
6

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

Format Log 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
7

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
2. Tests automatiques

Unit tests, integration tests, linting, security scan

3
3. Build Docker

Construction image et push vers Docker Registry privé

4
4. Deploy Staging

Déploiement automatique sur environnement staging

5
5. Tests E2E

Tests end-to-end avec Cypress

6
6. Approval

Review manuelle obligatoire pour production

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

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'utilisateur
  • TRANSACTIONS_SYNC : Nouvelles transactions détectées via Plaid
  • TRANSACTIONS_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_completed
  • card_linked
  • transaction_detected
  • qr_generated, qr_scanned
  • withdrawal_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
9

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.