362 lines
11 KiB
Markdown
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.
|