Architecture Logicielle
Ce document décrit l'architecture technique de Spotted avec les technologies, versions et librairies principales.
Vue d'ensemble
Architecture: Client-serveur avec API REST
- Backend: Java Spring Boot (API REST)
- Frontend: Flutter (multi-plateforme)
- Base de données: SQLite (V1) → PostgreSQL (V2)
- Stockage: AWS S3 + CloudFront CDN
- Paiements: Stripe Connect
Backend - API REST
Technologies principales
| Technologie |
Version |
Description |
| Java |
21 LTS |
Langage principal |
| Spring Boot |
3.3.x |
Framework application |
| Spring Data JPA |
Inclus |
ORM et repositories |
| Spring Security |
Inclus |
Authentification & autorisation |
| Spring Validation |
Inclus |
Validation des données |
Base de données
| Technologie |
Version |
Usage |
| SQLite |
3.45+ |
V1 (développement, MVP) |
| PostgreSQL |
16.x |
V2 (production, scalabilité) |
| Flyway |
10.x |
Migrations de schéma |
Librairies essentielles
Authentification & Sécurité
<!-- JWT pour authentification stateless -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>0.12.5</version>
</dependency>
<!-- Hashing mots de passe -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-crypto</artifactId>
</dependency>
Stockage et traitement d'images
<!-- AWS S3 SDK -->
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>s3</artifactId>
<version>2.25.x</version>
</dependency>
<!-- Traitement d'images -->
<dependency>
<groupId>org.imgscalr</groupId>
<artifactId>imgscalr-lib</artifactId>
<version>4.2</version>
</dependency>
<!-- Extraction EXIF -->
<dependency>
<groupId>com.drewnoakes</groupId>
<artifactId>metadata-extractor</artifactId>
<version>2.19.0</version>
</dependency>
<!-- WebP support -->
<dependency>
<groupId>org.sejda.imageio</groupId>
<artifactId>webp-imageio</artifactId>
<version>0.1.6</version>
</dependency>
Paiements
<!-- Stripe SDK -->
<dependency>
<groupId>com.stripe</groupId>
<artifactId>stripe-java</artifactId>
<version>25.x</version>
</dependency>
Processing asynchrone
<!-- Redis pour queues (V2) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- Scheduling -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
Email
<!-- JavaMail -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!-- Templates email (Thymeleaf) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
Génération PDF
<!-- iText pour factures et attestations -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext7-core</artifactId>
<version>8.0.3</version>
</dependency>
Validation & Utilities
<!-- Lombok (réduction boilerplate) -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<!-- MapStruct (DTO mapping) -->
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.5.5.Final</version>
</dependency>
<!-- Apache Commons Lang -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
Tests
<!-- JUnit 5 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- Mockito -->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<scope>test</scope>
</dependency>
<!-- REST Assured (tests API) -->
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<version>5.4.0</version>
<scope>test</scope>
</dependency>
Monitoring & Logs
<!-- Actuator (health checks, metrics) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- Logback (par défaut avec Spring Boot) -->
<!-- Sentry (erreurs en production) -->
<dependency>
<groupId>io.sentry</groupId>
<artifactId>sentry-spring-boot-starter</artifactId>
<version>7.6.0</version>
</dependency>
Frontend - Flutter
Technologies principales
| Technologie |
Version |
Description |
| Flutter |
3.19+ |
Framework UI multi-plateforme |
| Dart |
3.3+ |
Langage |
- Web (prioritaire V1): Application web responsive
- iOS (V2): Application native iPhone/iPad
- Android (V2): Application native
- Desktop (V3+): macOS, Windows, Linux (optionnel)
Librairies principales
Navigation & State Management
dependencies:
# Routing
go_router: ^13.2.0
# State management
riverpod: ^2.5.0
flutter_riverpod: ^2.5.0
# Reactive programming
rxdart: ^0.27.7
Réseau & API
dependencies:
# HTTP client
dio: ^5.4.1
# Retry logic
dio_smart_retry: ^6.0.0
# JSON serialization
json_annotation: ^4.8.1
dev_dependencies:
json_serializable: ^6.7.1
build_runner: ^2.4.8
Authentification & Stockage
dependencies:
# Stockage sécurisé (tokens)
flutter_secure_storage: ^9.0.0
# Stockage local (cache, panier)
shared_preferences: ^2.2.2
# JWT decode
jwt_decoder: ^2.0.1
UI Components
dependencies:
# Icons
cupertino_icons: ^1.0.6
font_awesome_flutter: ^10.7.0
# Images & Cache
cached_network_image: ^3.3.1
# Loading indicators
flutter_spinkit: ^5.2.0
# Toasts & Snackbars
fluttertoast: ^8.2.4
# Image picker (upload photos)
image_picker: ^1.0.7
# File picker
file_picker: ^6.2.0
# Drag & drop upload
desktop_drop: ^0.4.4
# Lightbox/Gallery viewer
photo_view: ^0.14.0
# QR Code
qr_flutter: ^4.1.0
mobile_scanner: ^4.0.1
dependencies:
# Form validation
flutter_form_builder: ^9.2.1
form_builder_validators: ^9.1.0
Paiement
dependencies:
# Stripe SDK
flutter_stripe: ^10.1.1
Partage & Social
dependencies:
# Partage social
share_plus: ^7.2.2
# URL launcher
url_launcher: ^6.2.5
Internationalisation
dependencies:
# i18n
intl: ^0.19.0
flutter_localizations:
sdk: flutter
Utils
dependencies:
# Date formatting
intl: ^0.19.0
# UUID generation
uuid: ^4.3.3
# Debounce
easy_debounce: ^2.0.3
# Path manipulation
path: ^1.8.3
Tests
dev_dependencies:
flutter_test:
sdk: flutter
# Mocking
mockito: ^5.4.4
# Widget tests
flutter_driver:
sdk: flutter
# Integration tests
integration_test:
sdk: flutter
Infrastructure & DevOps
Hébergement & Cloud
| Service |
Provider |
Usage |
| API Hosting |
Railway / Render / Heroku |
Backend Java (V1) |
| API Hosting |
AWS ECS / GCP Cloud Run |
Backend Java (V2 scalable) |
| Frontend Web |
Vercel / Netlify / Cloudflare Pages |
Hosting Flutter Web |
| Stockage S3 |
AWS S3 |
Photos originales et traitées |
| CDN |
CloudFront / Cloudflare |
Distribution images |
| Base de données |
Railway / Supabase / AWS RDS |
PostgreSQL managé (V2) |
CI/CD
# GitHub Actions ou GitLab CI
Backend:
- Build: Maven / Gradle
- Tests: JUnit + REST Assured
- Docker: Image Docker
- Deploy: Railway / AWS ECS
Frontend:
- Build: flutter build web
- Tests: flutter test
- Deploy: Vercel / Netlify
Monitoring & Logs
| Service |
Usage |
| Sentry |
Erreurs applicatives (backend + frontend) |
| LogRocket |
Session replay frontend (optionnel V2) |
| Datadog / New Relic |
APM et monitoring infrastructure (V2) |
| CloudWatch |
Logs AWS (si AWS) |
Services externes
Requis V1
| Service |
Usage |
Plan |
| Stripe |
Paiements + Connect |
Standard (commission par transaction) |
| SendGrid / Mailgun |
Emails transactionnels |
Free tier puis payant |
| Printful / Gelato |
Print-on-demand |
Commission par produit |
Optionnel V2
| Service |
Usage |
Plan |
| Algolia |
Recherche photos avancée |
Payant |
| Cloudinary |
Traitement images (alternative) |
Free tier puis payant |
| Twilio |
SMS notifications |
Payant |
| Google Vision API |
Reconnaissance faciale, OCR dossards |
Pay-per-use |
Architecture réseau
┌─────────────┐
│ Clients │ (Browser, iOS, Android)
└──────┬──────┘
│
│ HTTPS
│
┌──────▼──────────┐
│ CloudFlare │ (CDN + WAF + DDoS protection)
│ / Cloudfront │
└──────┬──────────┘
│
├──────────────────┬──────────────────┐
│ │ │
┌──────▼──────┐ ┌───────▼────────┐ ┌─────▼─────┐
│ Flutter Web │ │ API REST │ │ S3 CDN │
│ (Static) │ │ Spring Boot │ │ (Images) │
└─────────────┘ └────────┬───────┘ └───────────┘
│
┌────────▼────────┐
│ PostgreSQL │
│ (Database) │
└─────────────────┘
│
┌────────▼────────┐
│ Redis │
│ (Queue/Cache) │
└─────────────────┘
Versions & Compatibilité
Minimum requis - Développement
- Java: JDK 21 (LTS)
- Maven: 3.9+
- Flutter: 3.19+
- Dart: 3.3+
- Node.js: 20+ (pour outils build Flutter web)
Minimum requis - Production
- JVM: OpenJDK 21 / Amazon Corretto 21
- PostgreSQL: 16+
- Redis: 7+ (V2)
Standards de code
Backend Java
- Style: Google Java Style Guide
- Linting: Checkstyle
- Formatting: Spotless
- Coverage: JaCoCo (objectif: >80%)
Frontend Flutter
- Style: Effective Dart
- Linting: flutter_lints package
- Formatting: dart format
- Coverage: flutter test --coverage (objectif: >70%)
Sécurité
Backend
- HTTPS obligatoire (TLS 1.3)
- JWT pour authentification (expiration: 24h)
- Refresh tokens (expiration: 30j)
- Rate limiting: 100 req/min par IP
- CORS configuré strictement
- Helmet headers (CSP, HSTS, etc.)
- SQL injection prevention (JPA parameterized queries)
- XSS prevention (output encoding)
Frontend
- Stockage sécurisé tokens (flutter_secure_storage)
- Input validation côté client + serveur
- HTTPS pinning (V2)
- Obfuscation code (flutter build --obfuscate)
Dernière mise à jour: 18 février 2025