|
| 1 | +# Evodron |
| 2 | + |
| 3 | +**Plateforme de parrainage** — backend Node.js/Express, base SQLite, frontend statique. |
| 4 | + |
| 5 | +> ℹ️ Le fichier `README.md` à la racine documente le **GitHub Copilot CLI** (outil de développement intégré à ce dépôt). Ce fichier `EVODRON.md` documente le **produit EVODRON** lui-même. |
| 6 | +
|
| 7 | +--- |
| 8 | + |
| 9 | +## Architecture |
| 10 | + |
| 11 | +``` |
| 12 | +evodron/ |
| 13 | +├── app.js # Point d'entrée Express |
| 14 | +├── public/ # Frontend statique (HTML/CSS/JS) |
| 15 | +│ ├── index.html |
| 16 | +│ ├── login.html |
| 17 | +│ ├── register.html |
| 18 | +│ ├── dashboard.html |
| 19 | +│ ├── referral.html |
| 20 | +│ ├── css/style.css |
| 21 | +│ └── js/referral.js |
| 22 | +├── src/ |
| 23 | +│ ├── config/ |
| 24 | +│ │ └── rewards.js # Configuration des récompenses |
| 25 | +│ ├── db/ |
| 26 | +│ │ ├── database.js # Connexion SQLite (better-sqlite3) |
| 27 | +│ │ └── schema.sql # Schéma de la base de données |
| 28 | +│ ├── middleware/ |
| 29 | +│ │ ├── auth.js # Vérification JWT |
| 30 | +│ │ └── rateLimiter.js # Rate limiting par IP |
| 31 | +│ ├── models/ |
| 32 | +│ │ ├── user.js # Modèle utilisateur |
| 33 | +│ │ ├── referral.js # Modèle parrainage |
| 34 | +│ │ └── reward.js # Modèle récompenses |
| 35 | +│ └── routes/ |
| 36 | +│ ├── auth.js # /api/auth (register, login) |
| 37 | +│ ├── health.js # /api/health |
| 38 | +│ └── referral.js # /api/referral (link, stats, rewards, activate-use) |
| 39 | +└── tests/ |
| 40 | + ├── referral.test.js # Tests flux de parrainage |
| 41 | + └── anti-abuse.test.js # Tests anti-fraude |
| 42 | +``` |
| 43 | + |
| 44 | +## Prérequis |
| 45 | + |
| 46 | +- **Node.js** >= 18 |
| 47 | +- **npm** >= 9 |
| 48 | + |
| 49 | +## Installation |
| 50 | + |
| 51 | +```bash |
| 52 | +git clone https://github.com/julesdemangeot-ship-it/EVODRON.git |
| 53 | +cd EVODRON |
| 54 | +npm install |
| 55 | +cp .env.example .env |
| 56 | +# Éditer .env et définir JWT_SECRET |
| 57 | +``` |
| 58 | + |
| 59 | +## Démarrage |
| 60 | + |
| 61 | +```bash |
| 62 | +JWT_SECRET=votre-clé-secrète npm start |
| 63 | +# ou avec le fichier .env : |
| 64 | +npm start |
| 65 | +``` |
| 66 | + |
| 67 | +Le serveur écoute sur `http://localhost:3000` (configurable via `PORT`). |
| 68 | + |
| 69 | +## Tests |
| 70 | + |
| 71 | +```bash |
| 72 | +npm test |
| 73 | +``` |
| 74 | + |
| 75 | +Tous les tests utilisent une base SQLite en mémoire (`DB_PATH=:memory:`). Aucune configuration supplémentaire n'est requise. |
| 76 | + |
| 77 | +## API |
| 78 | + |
| 79 | +### Authentification |
| 80 | + |
| 81 | +| Méthode | Endpoint | Description | |
| 82 | +|---------|----------|-------------| |
| 83 | +| `POST` | `/api/auth/register` | Créer un compte (avec code de parrainage optionnel) | |
| 84 | +| `POST` | `/api/auth/login` | Se connecter, obtenir un token JWT | |
| 85 | + |
| 86 | +### Parrainage |
| 87 | + |
| 88 | +| Méthode | Endpoint | Auth | Description | |
| 89 | +|---------|----------|------|-------------| |
| 90 | +| `GET` | `/api/referral/link` | ✅ | Obtenir son lien de parrainage | |
| 91 | +| `GET` | `/api/referral/stats` | ✅ | Statistiques de parrainage | |
| 92 | +| `GET` | `/api/referral/rewards` | ✅ | Historique et récompenses disponibles | |
| 93 | +| `POST` | `/api/referral/claim-reward/:id` | ✅ | Réclamer une récompense | |
| 94 | +| `POST` | `/api/referral/activate-use` | ✅ | Déclarer la première utilisation active | |
| 95 | +| `GET` | `/api/referral/program-info` | ❌ | Conditions du programme (public) | |
| 96 | + |
| 97 | +### Santé |
| 98 | + |
| 99 | +| Méthode | Endpoint | Description | |
| 100 | +|---------|----------|-------------| |
| 101 | +| `GET` | `/api/health` | État de l'application et de la base de données | |
| 102 | + |
| 103 | +### Authentification JWT |
| 104 | + |
| 105 | +Passer le token dans le header `Authorization: ****** ou dans un cookie `token`. |
| 106 | + |
| 107 | +## Variables d'environnement |
| 108 | + |
| 109 | +Voir `.env.example` pour la liste complète. |
| 110 | + |
| 111 | +| Variable | Obligatoire | Défaut | Description | |
| 112 | +|----------|-------------|--------|-------------| |
| 113 | +| `JWT_SECRET` | ✅ | — | Clé secrète JWT | |
| 114 | +| `JWT_EXPIRY` | ❌ | `7d` | Durée de validité du token | |
| 115 | +| `PORT` | ❌ | `3000` | Port d'écoute | |
| 116 | +| `APP_URL` | ❌ | détecté | URL de base pour les liens de parrainage | |
| 117 | +| `DB_PATH` | ❌ | `./evodron.db` | Chemin du fichier SQLite | |
| 118 | +| `NODE_ENV` | ❌ | `development` | Environnement d'exécution | |
| 119 | + |
| 120 | +## Déploiement Docker |
| 121 | + |
| 122 | +```bash |
| 123 | +# Copier et éditer les variables |
| 124 | +cp .env.example .env |
| 125 | +# Démarrer |
| 126 | +docker compose up -d |
| 127 | +``` |
| 128 | + |
| 129 | +## Flux de parrainage |
| 130 | + |
| 131 | +``` |
| 132 | +Alice s'inscrit → obtient un code de parrainage unique |
| 133 | + ↓ |
| 134 | +Alice partage son lien : /register?ref=ABCD1234 |
| 135 | + ↓ |
| 136 | +Bob s'inscrit avec ce lien → reçoit un bonus de bienvenue (10 crédits) |
| 137 | + ↓ |
| 138 | +Bob effectue sa première action active → POST /api/referral/activate-use |
| 139 | + ↓ |
| 140 | +Alice reçoit sa récompense de parrain (20 crédits) |
| 141 | +``` |
| 142 | + |
| 143 | +## Sécurité |
| 144 | + |
| 145 | +- Mots de passe hachés avec **bcrypt** (coût 12) |
| 146 | +- Tokens JWT signés (HS256) |
| 147 | +- Rate limiting : 10 req/15 min sur `/api/auth`, 100 req/min sur `/api/referral` |
| 148 | +- Auto-parrainage interdit (vérification modèle + contrainte DB) |
| 149 | +- Un utilisateur ne peut avoir qu'un seul parrain (contrainte UNIQUE en base) |
| 150 | +- Pas de récompense sans activation effective du filleul |
| 151 | + |
| 152 | +## Licence |
| 153 | + |
| 154 | +Le code source EVODRON (dossiers `src/`, `public/`, `tests/`, fichiers `app.js`, `package.json`) est propriétaire. |
| 155 | + |
| 156 | +Le fichier `README.md`, `install.sh`, `changelog.md` et `LICENSE.md` sont des fichiers hérités du **GitHub Copilot CLI** distribués sous leur propre licence (voir `LICENSE.md`). |
0 commit comments