18 KiB
18 KiB
Analyse de l'Arbre Source - ChartBastan
Vue d'ensemble de la Structure
chartbastan/
│
├── _bmad/ # Configuration BMad (workflow/agents)
│ ├── _config/ # Configuration des agents et workflows
│ ├── bmm/ # Configuration BMM
│ └── core/ # Core BMad system
│
├── _bmad-output/ # Artefacts de planification et implémentation
│ ├── analysis/ # Analyses et brainstorming
│ ├── implementation-artifacts/ # 38 fichiers d'implémentation détaillée
│ └── planning-artifacts/ # PRD, Architecture, Epics, UX
│
├── backend/ # Backend FastAPI (Part: api)
│ │
│ ├── alembic/ # Migrations de base de données
│ │ ├── versions/ # Scripts de migration (10 fichiers)
│ │ ├── env.py # Configuration Alembic
│ │ └── script.py.mako # Template de migration
│ │
│ ├── app/ # Code principal de l'application
│ │ ├── api/ # Endpoints REST (2 fichiers)
│ │ │ ├── dependencies.py # Dépendances d'API
│ │ │ └── __init__.py
│ │ │
│ │ ├── lib/ # Bibliothèques partagées
│ │ │ └── badges.py # Système de badges
│ │ │
│ │ ├── main.py # Point d'entrée FastAPI ⚡
│ │ │
│ │ ├── middleware/ # Middleware
│ │ │ ├── auth.py # Middleware d'authentification
│ │ │ └── cors.py # Middleware CORS
│ │ │
│ │ ├── ml/ # Services Machine Learning (5 services)
│ │ │ ├── sentiment_analyzer.py # Analyse de sentiment (VADER)
│ │ │ ├── prediction_calculator.py # Calcul de prédictions
│ │ │ └── [autres services ML]
│ │ │
│ │ ├── models/ # Modèles SQLAlchemy (12 modèles)
│ │ │ ├── user.py # Modèle utilisateur
│ │ │ ├── match.py # Modèle match
│ │ │ ├── prediction.py # Modèle prédiction
│ │ │ ├── user_prediction.py # Prédictions utilisateur
│ │ │ ├── tweet.py # Données Twitter
│ │ │ ├── reddit_post.py # Données Reddit
│ │ │ ├── rss_article.py # Données RSS
│ │ │ ├── sentiment_score.py # Scores de sentiment
│ │ │ ├── energy_score.py # Scores d'énergie
│ │ │ ├── api_key.py # Clés API tierces
│ │ │ └── badge.py # Système de badges
│ │ │
│ │ ├── schemas/ # Schémas Pydantic (14 fichiers)
│ │ │ ├── user.py
│ │ │ ├── match.py
│ │ │ ├── prediction.py
│ │ │ ├── tweet.py
│ │ │ ├── reddit_post.py
│ │ │ ├── energy_score.py
│ │ │ ├── sentiment_score.py
│ │ │ ├── badge.py
│ │ │ ├── leaderboard.py
│ │ │ ├── backtesting.py
│ │ │ ├── public.py
│ │ │ └── [autres schémas]
│ │ │
│ │ ├── queues/ # Gestion RabbitMQ (4 fichiers)
│ │ │
│ │ ├── scrapers/ # Scrapers de données (4 scrapers)
│ │ │ ├── twitter_scraper.py # Scraper Twitter
│ │ │ ├── reddit_scraper.py # Scraper Reddit
│ │ │ ├── rss_scraper.py # Scraper RSS
│ │ │ └── README.md # Documentation scraper
│ │ │
│ │ ├── services/ # Services métier (8 services)
│ │ │
│ │ └── workers/ # Workers asynchrones (4 workers)
│ │
│ ├── scripts/ # Scripts utilitaires
│ │ └── generate_historical_matches.py # Génération de données de test
│ │
│ ├── tests/ # Tests unitaires (30 fichiers)
│ │ ├── conftest.py # Configuration pytest
│ │ ├── test_api_*.py # Tests API
│ │ ├── test_*.py # Tests divers
│ │ └── run_tests.py # Script d'exécution des tests
│ │
│ ├── workers/ # Scripts d'exécution des workers
│ │ ├── run_energy_worker.py
│ │ ├── run_scraping_worker.py
│ │ └── run_sentiment_worker.py
│ │
│ ├── requirements.txt # Dépendances Python
│ ├── alembic.ini # Configuration Alembic
│ ├── run_server.bat # Script démarrage Windows
│ └── run_server.sh # Script démarrage Linux/Mac
│
├── chartbastan/ # Frontend Next.js (Part: frontend)
│ │
│ ├── public/ # Assets statiques
│ │ └── [fichiers SVG pour icônes]
│ │
│ ├── src/ # Code source
│ │ │
│ │ ├── app/ # App Router Next.js (22 fichiers)
│ │ │ ├── layout.tsx # Layout racine 📄
│ │ │ ├── page.tsx # Page d'accueil 🏠
│ │ │ ├── login/ # Page de login
│ │ │ ├── register/ # Page d'inscription
│ │ │ ├── dashboard/ # Dashboard principal
│ │ │ ├── matches/ # Pages de matchs
│ │ │ ├── predictions/ # Pages de prédictions
│ │ │ ├── leaderboard/ # Classements
│ │ │ ├── history/ # Historique
│ │ │ ├── badges/ # Badges
│ │ │ ├── referrals/ # Parrainage
│ │ │ ├── api/ # API Routes Next.js
│ │ │ │ └── auth/ # Routes d'authentification
│ │ │ └── [autres pages et routes]
│ │ │
│ │ ├── components/ # Composants React (72+ composants)
│ │ │ │
│ │ │ ├── ui/ # Composants UI shadcn/ui
│ │ │ │ ├── button.tsx # Boutons
│ │ │ │ ├── card.tsx # Cartes
│ │ │ │ ├── input.tsx # Inputs
│ │ │ │ ├── dropdown-menu.tsx # Menus déroulants
│ │ │ │ ├── tooltip.tsx # Tooltips
│ │ │ │ ├── badge.tsx # Badges UI
│ │ │ │ ├── alert.tsx # Alertes
│ │ │ │ ├── switch.tsx # Switches
│ │ │ │ ├── label.tsx # Labels
│ │ │ │ └── skeleton.tsx # Skeletons de chargement
│ │ │ │
│ │ │ ├── dashboard/ # Composants Dashboard
│ │ │ │ ├── DashboardWrapper.tsx
│ │ │ │ ├── RealTimeEnergyChart.tsx
│ │ │ │ ├── EnergyWave.tsx
│ │ │ │ ├── ConfidenceMeter.tsx
│ │ │ │ ├── MatchList.tsx
│ │ │ │ ├── MatchListItem.tsx
│ │ │ │ ├── PredictionCard.tsx
│ │ │ │ ├── RefreshIndicator.tsx
│ │ │ │ ├── EnergyWaveTooltip.tsx
│ │ │ │ └── ConfidenceTooltip.tsx
│ │ │ │
│ │ │ ├── matches/ # Composants Matchs
│ │ │ │
│ │ │ ├── predictions/ # Composants Prédictions
│ │ │ │
│ │ │ ├── leaderboard/ # Composants Classement
│ │ │ │ ├── LeaderboardItem.tsx
│ │ │ │ ├── PersonalRank.tsx
│ │ │ │ └── RankBadge.tsx
│ │ │ │
│ │ │ ├── history/ # Composants Historique
│ │ │ │ ├── PredictionHistoryItem.tsx
│ │ │ │ ├── AccuracyRate.tsx
│ │ │ │ └── SuccessBadge.tsx
│ │ │ │
│ │ │ ├── badges/ # Composants Badges
│ │ │ │ ├── BadgeCard.tsx
│ │ │ │ └── BadgeShare.tsx
│ │ │ │
│ │ │ ├── referrals/ # Composants Parrainage
│ │ │ │ ├── referralLink.tsx
│ │ │ │ └── rewardsList.tsx
│ │ │ │
│ │ │ ├── notifications/ # Composants Notifications
│ │ │ │ ├── NotificationPanel.tsx
│ │ │ │ ├── NotificationPreferences.tsx
│ │ │ │ ├── NotificationToast.tsx
│ │ │ │ ├── NotificationSwitch.tsx
│ │ │ │ ├── PredictionNotificationSettings.tsx
│ │ │ │ └── SuccessAnimation.tsx
│ │ │ │
│ │ │ ├── calendar/ # Composants Calendrier
│ │ │ │ ├── EnergyCalendar.tsx
│ │ │ │ ├── CalendarMatchItem.tsx
│ │ │ │ └── CalendarFilters.tsx
│ │ │ │
│ │ │ ├── comparison/ # Composants Comparaison
│ │ │ │ ├── ComparisonChart.tsx
│ │ │ │ └── ComparisonCard.tsx
│ │ │ │
│ │ │ ├── share/ # Composants Partage
│ │ │ │ ├── ShareButton.tsx
│ │ │ │ └── ShareMenu.tsx
│ │ │ │
│ │ │ ├── auth/ # Composants Authentification
│ │ │ │ ├── LoginForm.tsx
│ │ │ │ └── RegisterForm.tsx
│ │ │ │
│ │ │ ├── landing/ # Composants Landing Page
│ │ │ │ ├── HeroSection.tsx
│ │ │ │ └── EmailCaptureForm.tsx
│ │ │ │
│ │ │ ├── onboarding/ # Composants Onboarding
│ │ │ │ ├── Step1HowItWorks.tsx
│ │ │ │ ├── Step2HowToUse.tsx
│ │ │ │ └── Step3FirstSteps.tsx
│ │ │ │
│ │ │ ├── navigation/ # Composants Navigation
│ │ │ │ ├── TopTabs.tsx
│ │ │ │ └── BottomNav.tsx
│ │ │ │
│ │ │ ├── errors/ # Composants Erreurs
│ │ │ │ └── RateLimitError.tsx
│ │ │ │
│ │ │ ├── limits/ # Composants Limites
│ │ │ │ ├── PredictionCounter.tsx
│ │ │ │ ├── LimitReached.tsx
│ │ │ │ └── PremiumWall.tsx
│ │ │ │
│ │ │ └── [tests] # Tests des composants
│ │ │
│ │ ├── db/ # Base de données Drizzle
│ │ │ └── [configuration Drizzle]
│ │ │
│ │ ├── hooks/ # React Hooks personnalisés (9 hooks)
│ │ │
│ │ ├── lib/ # Utilitaires et API client (7 fichiers)
│ │ │ └── [services d'API, helpers]
│ │ │
│ │ ├── middleware/ # Middleware Next.js (3 fichiers)
│ │ │
│ │ ├── scripts/ # Scripts de migration (3 scripts)
│ │ │
│ │ ├── services/ # Services API (27 services)
│ │ │ ├── auth.ts
│ │ │ ├── matches.ts
│ │ │ ├── predictions.ts
│ │ │ ├── [autres services]
│ │ │
│ │ ├── stores/ # Zustand stores (2 stores)
│ │ │ ├── notificationStore.ts
│ │ │ └── onboarding-store.ts
│ │ │
│ │ └── tests/ # Tests (48 fichiers)
│ │ ├── components/
│ │ └── [autres tests]
│ │
│ ├── drizzle/ # Migrations Drizzle
│ │ └── [migrations et schema]
│ │
│ ├── components.json # Configuration shadcn/ui
│ ├── drizzle.config.ts # Configuration Drizzle
│ ├── eslint.config.mjs # Configuration ESLint
│ ├── next.config.ts # Configuration Next.js
│ ├── package.json # Dépendances Node.js
│ ├── postcss.config.mjs # Configuration PostCSS
│ ├── tsconfig.json # Configuration TypeScript
│ ├── vitest.config.ts # Configuration Vitest
│ └── chartbastan.db* # Base de données SQLite
│
├── docs/ # Documentation du projet 📚
│ ├── project-scan-report.json # État du workflow de scan
│ ├── project-structure.md # Structure du projet
│ ├── project-parts-metadata.md # Métadonnées des parties
│ ├── existing-documentation-inventory.md # Documentation existante
│ ├── user-provided-context.md # Contexte utilisateur
│ ├── technology-stack.md # Stack technologique
│ ├── architecture-patterns.md # Patterns d'architecture
│ └── [autres fichiers générés]
│
├── check-prerequisites.js # Script de vérification des prérequis
└── [autres fichiers de configuration]
Points d'Entrée Principaux
Frontend (chartbastan/)
Point d'entrée principal: src/app/page.tsx
- Page d'accueil de l'application
- Route:
/
Point d'entrée Next.js: src/app/layout.tsx
- Layout racine qui enveloppe toute l'application
- Définit l'UI globale et les providers
Configuration:
package.json- Dépendances et scriptsnext.config.ts- Configuration Next.jstsconfig.json- Configuration TypeScript
Backend (backend/)
Point d'entrée principal: app/main.py ⚡
- Application FastAPI
- Démarre le serveur Uvicorn sur le port 8000
Configuration:
requirements.txt- Dépendances Pythonalembic.ini- Configuration des migrations
Répertoires Critiques
Frontend
| Répertoire | But | Contenu Clé |
|---|---|---|
src/app/ |
Routes et pages Next.js | page.tsx, layout.tsx, /dashboard/ |
src/components/ |
Composants React réutilisables | 72+ composants UI |
src/services/ |
Services API | Communication avec le backend |
src/stores/ |
État global | Zustand stores |
src/hooks/ |
React Hooks personnalisés | Logique réutilisable |
src/lib/ |
Utilitaires | Helpers et fonctions d'aide |
Backend
| Répertoire | But | Contenu Clé |
|---|---|---|
app/api/ |
Endpoints REST | Dépendances d'API |
app/models/ |
Modèles SQLAlchemy | 12 modèles de données |
app/schemas/ |
Schémas Pydantic | Validation de données |
app/services/ |
Logique métier | 8 services |
app/scrapers/ |
Scrapers de données | Twitter, Reddit, RSS |
app/ml/ |
Services ML | Sentiment, prédictions |
app/workers/ |
Workers async | Tâches asynchrones |
tests/ |
Tests unitaires | 30 tests |
Points d'Intégration Frontend-Backend
Communication API
Frontend → Backend:
- Services dans
src/services/appellenthttp://localhost:8000 - Exemple:
src/services/matches.ts→GET http://localhost:8000/api/matches
Base de données partagée:
chartbastan/chartbastan.db- Accessible par frontend (Drizzle) et backend (SQLAlchemy)
Documentation et Artefacts
_bmad-output/:
planning-artifacts/- PRD, Architecture, Epicsimplementation-artifacts/- 38 fichiers d'implémentationanalysis/- Analyses et brainstorming
docs/:
- Documentation générée par ce workflow
- Structure, stack, architecture
Scripts Utilitaires
Backend
| Script | But |
|---|---|
run_server.bat |
Démarrer le serveur FastAPI (Windows) |
run_server.sh |
Démarrer le serveur FastAPI (Linux/Mac) |
scripts/generate_historical_matches.py |
Générer des données de test |
Frontend
| Script (package.json) | But |
|---|---|
npm run dev |
Démarrer le serveur de développement |
npm run build |
Build de production |
npm run start |
Démarrer le serveur de production |
npm run lint |
Exécuter ESLint |
npm run type-check |
Vérifier les types TypeScript |
npm run test |
Exécuter les tests Vitest |
Base de Données
SQLite (Phase 1):
- Frontend:
chartbastan/chartbastan.db(Drizzle ORM) - Backend: Accès à la même base (SQLAlchemy)
Migrations:
- Frontend:
drizzle/migrations/ - Backend:
alembic/versions/
Phase 2+: PostgreSQL (production)
Résumé
Total de fichiers source:
- Backend: ~100+ fichiers Python
- Frontend: ~300+ fichiers TypeScript/TSX
Architecture:
- Frontend: Next.js App Router avec composants React
- Backend: FastAPI avec architecture en couches
- Communication: REST API
- Base de données: SQLite partagée
Points clés:
- Entry point frontend:
src/app/page.tsx - Entry point backend:
app/main.py - Integration: Services
src/services/→ APIhttp://localhost:8000 - Database: SQLite partagée à
chartbastan/chartbastan.db