Architecture de Letter Box

1. Vue d’ensemble

L’application repose sur une architecture multi-couches :

  • Frontend : React 18 (Vite, Axios) – dossier frontend/
  • Backend : FastAPI + SQLAlchemy – dossier backend/
  • Base de données : PostgreSQL 15 – dossier db/
  • Scraper : Scrapy + MongoDB – dossier scraper/
  • Orchestration : Docker Compose (local), Kubernetes (prod/devops)

Chaque composant est conteneurisé et communique via un réseau Docker ou un cluster Kubernetes.


2. Architecture logique

flowchart LR
Client --> Frontend
Frontend --> Backend
Backend --> PostgreSQL
Scraper --> Backend

3. Séparation des responsabilités

Frontend

  • Interface utilisateur moderne (React, Vite)
  • Appels API via Axios (src/api.js)
  • Gestion du state avec Hooks
  • Exemple d’appel API :
// frontend/src/api.js
import axios from 'axios';
export const getMovies = () => axios.get('/api/movies');

Backend

  • API REST (FastAPI, main.py)
  • Modélisation ORM (SQLAlchemy)
  • Endpoints CRUD, health check (/health)
  • Tests unitaires (test_import_movies.py)
  • Exemple d’endpoint :
# backend/main.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/health")
def health():
    return {"status": "ok"}

Base de données

  • PostgreSQL 15, schéma défini dans db/init.sql
  • Migrations automatisées (migrate.py)
  • Index sur les champs critiques (title, release_date)
  • Exemple de table :
-- db/init.sql
CREATE TABLE movies (
    id SERIAL PRIMARY KEY,
    title TEXT NOT NULL,
    release_date DATE,
    ...
);

Scraper

  • Extraction de données AlloCiné (Scrapy)
  • Export JSON et insertion MongoDB
  • Scripts d’intégration (integration_pipeline.py)
  • Exemple d’utilisation :
# scraper/integration_pipeline.py
from mongo_extractor import extract_movies
movies = extract_movies()
# ... intégration dans la base

4. Ports utilisés

ComposantPort
Frontend3000
Backend8001
PostgreSQL5432
MongoDB27017
Quartz (doc)8080

5. Exemple de flux applicatif

  • Un utilisateur consulte le frontend (port 3000), qui interroge l’API backend (port 8001).
  • Le backend lit/écrit dans PostgreSQL (port 5432).
  • Le scraper importe des films depuis AlloCiné, stocke dans MongoDB, puis exporte vers le backend.

Cette architecture garantit la modularité, la scalabilité et la maintenabilité du projet.