chartbastan/docs/technology-stack.md
2026-02-01 09:31:38 +01:00

362 lines
11 KiB
Markdown

# Stack Technologique - ChartBastan
## Vue d'ensemble
Le projet ChartBastan utilise une stack moderne full-stack avec:
- **Frontend:** Next.js 16 avec TypeScript
- **Backend:** FastAPI avec Python 3.11+
- **Base de données:** SQLite (développement) → PostgreSQL (production)
- **Communication:** REST API
- **Message Queue:** RabbitMQ (pour workers asynchrones)
---
## Partie 1: Frontend (chartbastan/)
### Framework & Language
| Catégorie | Technologie | Version | Justification |
|-----------|-------------|---------|--------------|
| Framework | Next.js | 16.1.3 | Framework React moderne avec SSR, SSG, et App Router |
| Language | TypeScript | 5.0 | Typage statique pour la fiabilité du code |
| Runtime | Node.js | 20+ | Environment JavaScript moderne |
### UI & Styling
| Catégorie | Technologie | Version | Justification |
|-----------|-------------|---------|--------------|
| CSS Framework | Tailwind CSS | v4 | Utilitaire-first CSS, développement rapide |
| UI Library | shadcn/ui | - | Composants Radix UI accessibles et personnalisables |
| Icons | Lucide React | 0.562.0 | Icônes SVG légères et cohérentes |
| Animation | Framer Motion | 12.26.2 | Animations fluides et performantes |
| Pull-to-refresh | react-pull-to-refresh | 2.0.1 | UX mobile native pour rafraîchir |
### State Management
| Catégorie | Technologie | Version | Justification |
|-----------|-------------|---------|--------------|
| State Store | Zustand | 5.0.10 | State management léger et simple |
| Data Fetching | React Query (@tanstack/react-query) | 5.90.18 | Cache, sync, et gestion des appels API |
### Database & ORM
| Catégorie | Technologie | Version | Justification |
|-----------|-------------|---------|--------------|
| Database | SQLite | better-sqlite3 12.6.2 | Base légère pour développement |
| ORM | Drizzle ORM | 0.44.7 | ORM moderne type-safe avec SQL pur |
| Migrations | Drizzle Kit | 0.31.8 | Génération de migrations et schéma |
### Visualization
| Catégorie | Technologie | Version | Justification |
|-----------|-------------|---------|--------------|
| Charts | Recharts | 3.6.0 | Graphiques React déclaratifs |
| Advanced Viz | D3.js | 7.9.0 | Visualisations complexes et personnalisées |
| Types | @types/d3 | 7.4.3 | Typage TypeScript pour D3 |
### Authentication
| Catégorie | Technologie | Version | Justification |
|-----------|-------------|---------|--------------|
| Auth | better-auth | 1.4.14 | Solution d'authentification moderne pour Next.js |
| Password Hashing | bcryptjs | 3.0.3 | Hashage sécurisé des mots de passe |
### Notifications
| Catégorie | Technologie | Version | Justification |
|-----------|-------------|---------|--------------|
| Web Push | web-push | 3.6.7 | Notifications push web standard W3C |
| Types | @types/web-push | 3.6.4 | Typage TypeScript |
### Validation & Forms
| Catégorie | Technologie | Version | Justification |
|-----------|-------------|---------|--------------|
| Validation | Zod | 4.3.5 | Validation de schéma avec TypeScript |
### Messaging
| Catégorie | Technologie | Version | Justification |
|-----------|-------------|---------|--------------|
| Redis Client | ioredis | 5.9.2 | Client Redis pour pub/sub et cache |
### Utilities
| Catégorie | Technologie | Version | Justification |
|-----------|-------------|---------|--------------|
| Class Variance | class-variance-authority | 0.7.1 | Gestion des variantes de composants |
| clsx | clsx | 2.1.1 | Concaténation de classes conditionnelle |
| tailwind-merge | tailwind-merge | 3.4.0 | Fusion intelligente de classes Tailwind |
### Development Tools
| Catégorie | Technologie | Version | Justification |
|-----------|-------------|---------|--------------|
| Linter | ESLint | 9 | Linting JavaScript/TypeScript |
| Testing | Vitest | 4.0.17 | Framework de test rapide et moderne |
| Testing Library | @testing-library/react | 16.3.1 | Tests de composants React |
| Testing Library | @testing-library/user-event | 14.6.1 | Simulation d'interactions utilisateur |
| Testing Library | @testing-library/jest-dom | 6.9.1 | Matchers DOM pour Jest/Vitest |
| Happy DOM | happy-dom | 20.3.1 | Léger DOM implementation pour tests |
| JSDOM | jsdom | 27.4.0 | DOM implementation pour tests |
### Architecture Pattern
**Type:** Component-based / App Router (Next.js 16)
**Caractéristiques:**
- App Router avec Server Components
- Client Components pour l'interactivité
- API Routes pour backend intégré
- Middleware pour authentification et routing
- Streaming et Suspense pour UX optimisée
**Structure:**
- `src/app/` - App Router (routes, layouts, pages)
- `src/components/` - Composants réutilisables
- `src/services/` - Services API et logique métier
- `src/hooks/` - React Hooks personnalisés
- `src/stores/` - Zustand stores
- `src/lib/` - Utilitaires et helpers
---
## Partie 2: Backend (backend/)
### Framework & Server
| Catégorie | Technologie | Version | Justification |
|-----------|-------------|---------|--------------|
| Framework | FastAPI | 0.128.0 | API moderne, rapide, avec documentation auto |
| ASGI Server | Uvicorn | 0.30.0 | Server ASGI haute performance |
| Language | Python | 3.11+ | Version moderne avec typage amélioré |
### Database & ORM
| Catégorie | Technologie | Version | Justification |
|-----------|-------------|---------|--------------|
| ORM | SQLAlchemy | 2.0.45 | ORM Python mature et flexible |
| Migrations | Alembic | 1.13.0 | Outil de migration de base de données |
### Validation & Settings
| Catégorie | Technologie | Version | Justification |
|-----------|-------------|---------|--------------|
| Validation | Pydantic | 2.7.0 | Validation de données avec Python |
| Settings | Pydantic Settings | 2.3.0 | Gestion des variables d'environnement |
| Email Validation | email-validator | 2.1.0 | Validation d'adresses email |
### Data Scraping
| Catégorie | Technologie | Version | Justification |
|-----------|-------------|---------|--------------|
| Twitter API | tweepy | 4.14.0 | Client Python pour l'API Twitter v2 |
| Reddit API | praw | 7.8.1 | Python Reddit API Wrapper |
| RSS Parser | feedparser | 6.0.11 | Parser RSS/Atom feeds |
### Machine Learning
| Catégorie | Technologie | Version | Justification |
|-----------|-------------|---------|--------------|
| Sentiment Analysis | vaderSentiment | 3.3.2 | Analyse de sentiment pour texte social media |
| NLP | textblob | 0.17.1 | Traitement du langage naturel |
### Message Queue
| Catégorie | Technologie | Version | Justification |
|-----------|-------------|---------|--------------|
| RabbitMQ Client | pika | 1.3.2 | Client AMQP pour RabbitMQ |
### Development Tools
| Catégorie | Technologie | Version | Justification |
|-----------|-------------|---------|--------------|
| Linter | flake8 | 7.1.0 | Linting PEP 8 |
| Formatter | black | 24.8.0 | Formatting Python automatique |
| Testing | pytest | 8.3.3 | Framework de tests Python |
### File Upload
| Catégorie | Technologie | Version | Justification |
|-----------|-------------|---------|--------------|
| Multipart | python-multipart | 0.0.9 | Support de formulaire multipart |
### Architecture Pattern
**Type:** REST API / Service-oriented
**Caractéristiques:**
- API RESTful avec FastAPI
- Documentation auto-générée (Swagger/OpenAPI)
- Async/await pour performances
- Dependency injection
- Middleware pour auth, CORS
- Background tasks avec Celery/RabbitMQ
**Structure:**
- `app/api/` - Endpoints REST
- `app/models/` - Modèles SQLAlchemy
- `app/schemas/` - Schémas Pydantic
- `app/services/` - Business logic
- `app/ml/` - Services ML
- `app/scrapers/` - Scrapers (Twitter, Reddit, RSS)
- `app/queues/` - Gestion RabbitMQ
- `app/workers/` - Workers asynchrones
- `app/middleware/` - Middleware (auth, CORS)
---
## Architecture Globale
### Pattern de Communication
**Frontend ↔ Backend:**
- Protocol: REST API (HTTP/HTTPS)
- Format: JSON
- Base URL: `http://localhost:8000` (dev)
### Architecture de Données
**Phase 1 (Développement):**
- Frontend Database: SQLite (chartbastan.db)
- Backend Database: SQLite partagée
- ORM: Drizzle (frontend) + SQLAlchemy (backend)
**Phase 2+ (Production):**
- Database: PostgreSQL
- Cache: Redis (optionnel)
- ORM: Drizzle + SQLAlchemy
### Asynchronous Processing
**RabbitMQ:**
- Message broker pour tâches asynchrones
- Workers: scraping, analyse de sentiment, prédictions
- Découplage frontend/backend
---
## Dépendances Externes
### APIs Tierces
**Frontend:**
- Twitter API (accès direct, si configuré)
- Reddit API (accès direct, si configuré)
**Backend:**
- Twitter API v2 (via tweepy)
- Reddit API (via praw)
### Infrastructure
**Développement:**
- SQLite (base de données locale)
- RabbitMQ (optionnel, pour workers)
**Production (recommandé):**
- PostgreSQL (base de données)
- Redis (cache, sessions)
- RabbitMQ (message queue)
- VPS (hébergement)
---
## Sécurité
### Frontend
- better-auth pour authentification
- bcryptjs pour hashage des mots de passe
- Validation Zod des données d'entrée
### Backend
- Authentification JWT (via better-auth)
- Validation Pydantic
- CORS configuré
- Middleware de sécurité
---
## Performance
### Frontend Optimizations
- Next.js App Router (Server Components)
- Streaming et Suspense
- Code splitting automatique
- Optimisation d'images
- Cache React Query
### Backend Optimizations
- FastAPI async/await
- SQLAlchemy async operations
- Connection pooling
- RabbitMQ pour tâches lourdes
---
## Monitoring & Logging
### Frontend
- Logging via console (développement)
- Error tracking (à implémenter en production)
### Backend
- Logging structuré Python
- Error handling centralisé
- Monitoring (à implémenter en production)
---
## Testing
### Frontend Tests
- Vitest (framework de test)
- React Testing Library (composants)
- User Event (interactions)
- Type checking (TypeScript)
### Backend Tests
- pytest (framework de test)
- Tests unitaires et d'intégration
- Couverture de code (à implémenter)
---
## CI/CD
### Frontend
- ESLint
- TypeScript type-check
- Next.js build
- Tests Vitest
### Backend
- flake8 (linting)
- black (formatting)
- pytest (tests)
---
## Résumé de la Stack
**Frontend:**
- Framework: Next.js 16.1.3 + TypeScript 5
- UI: Tailwind CSS v4 + shadcn/ui
- State: Zustand + React Query
- Database: Drizzle ORM + SQLite
- Visualization: D3.js + Recharts
**Backend:**
- Framework: FastAPI 0.128.0 + Python 3.11+
- ORM: SQLAlchemy 2.0.45 + Alembic
- Scraping: tweepy + praw + feedparser
- ML: vaderSentiment + textblob
- Queue: RabbitMQ (pika)
**Infrastructure:**
- Database: SQLite (dev) → PostgreSQL (prod)
- Message Queue: RabbitMQ
- API Docs: Swagger/OpenAPI auto-généré
Cette stack est moderne, performante et bien adaptée aux besoins de l'application.