Skip to content

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

Plateformes cibles

  • Web (prioritaire V1): Application web responsive
  • iOS (V2): Application native iPhone/iPad
  • Android (V2): Application native
  • Desktop (V3+): macOS, Windows, Linux (optionnel)

Librairies principales

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

Formulaires & Validation

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