# AUDIT COMPLET — RollerLogic — État du projet & Checklist Production

Ce document est un **audit “pré-prod”** destiné à préparer un lancement avec de vrais utilisateurs.
Il est volontairement **sans secrets** (mots de passe, clés, IP, etc.). Utiliser Docker Secrets et des variables d’environnement pour tout ce qui est sensible.

## 1) Vue d'ensemble du projet

| Composant | Technologie | Version / Note |
|---|---|---|
| Moteur de jeu | Phaser 3 + TypeScript | `rollerlogic-mobile` (package `v1.3.12`) |
| API | Fastify 5 + MySQL | `rollerlogic-api` (package `v1.3.17`) |
| Mobile | Capacitor 8 (Android) + PWA | selon build |
| Paiements | Stripe (web) | checkout + webhooks |
| Déploiement | Docker Swarm + Traefik | image tag (ex: `v1.3.38`) |
| Base de données | MySQL 8 (OVH CloudDB) | schéma + migrations SQL |

Modes de jeu implémentés : **Campagne**, **Arcade**, **Infini**, **Tutoriel**, **Défi quotidien**, **Défi hebdomadaire**.

Monétisation (état actuel) : **Cash packs** (Silver/Gold/Platinum), **Packs d'avatars**, **Packs de billes**, **Challenge Pack**, **VIP No-Ads**.

## 2) Ce qui est bien fait

- Auth : **JWT + refresh token HttpOnly**, rotation refresh, verrouillage après échecs, migration auto bcrypt → argon2id.
- Secrets : support `_FILE` + **Docker Secrets** côté prod (via `resolveSecret()`).
- Config : centralisée dans `rollerlogic-api/src/config.ts`.
- CORS : whitelist explicite en production.
- Traçabilité : `audit_log` + ledger `wallet_history` sur les routes sensibles.
- Rate limiting : global + routes sensibles (auth, leaderboard, stats, etc.).
- Guard-fous anti-triche : contraintes sur payload (ex: `moves`, `timeMs`).
- `X-Installation-Id` : traçabilité multi-device.
- DB : schéma riche (FK + index + cascades).
- TypeScript strict : compilation OK.
- Docker : multi-stage, user non-root côté runner.
- Traefik : TLS + redirect, stratégie update/rollback.

## 3) Problèmes critiques (bloquants production)

### 3.1 Secrets exposés dans le repo

Constat : des scripts/outils et documents ont pu contenir des secrets (ex: mots de passe DB).

Actions :
- **Considérer les secrets comme compromis**, les **rotater immédiatement**.
- Supprimer tout secret des fichiers versionnés et basculer vers **Docker Secrets** / variables d’env.
- (Optionnel mais recommandé) réécrire l’historique Git si des secrets ont été committés.

### 3.2 Publicités AdMob (état actuel)

Constat : l’intégration rewarded ads est **non-fiable** pour une prod “monétisation pub” :
- PWA : rewarded ads indisponibles.
- Mobile : plugin présent, mais le flux de simulation / contournement doit être clarifié (ex: UX, anti-abus, politiques store).

Action : **implémenter le vrai flux AdMob** ou **désactiver** la fonctionnalité et retirer l’UI associée avant sortie.
À minima : **ne jamais simuler** une pub rewarded en build prod et supprimer tout contournement (ex: options debug).

Notes “feature flag” recommandées :
- API : `ADS_ENABLED=false` (par défaut en prod) coupe les routes `/ads/*` côté serveur.
- Mobile : `VITE_ADS_ENABLED=false` (par défaut) coupe l’affichage et l’exécution des rewarded ads côté client.

### 3.3 Google Play Billing (si publication Play Store)

Constat : Stripe web uniquement ne couvre pas les exigences Play Store pour achats numériques in-app.

Action : intégrer **Google Play Billing** si publication sur le store Android.

### 3.4 CI/CD, backup, monitoring

Constats :
- CI/CD partiel : CI (build/tests) ok, mais déploiement encore manuel → risque de déployer une régression.
- Backup DB absent → risque de perte irréversible.
- Monitoring/alerting absent → incidents non détectés.

Actions minimales :
- CI : lint/typecheck/tests + build (workflow GitHub Actions présent).
- CD : étape deploy (Swarm) + rollback + approbation (si souhaité).
- Backup : plan + test de restore.
- Monitoring : uptime + alerting (même minimal).

## 4) Problèmes importants (à corriger avant prod)

Priorités recommandées :
- Security headers sur **API + frontend** (Traefik ou API) : vérifier qu’ils sont bien appliqués.
- `@fastify/helmet` côté API : déjà présent, vérifier la configuration (CSP off si SPA, HSTS géré côté Traefik, etc.).
- Durcir config Capacitor (`androidScheme=https`, `allowMixedContent=false`) pour release.
- Ne pas rendre “paiements gratuits” si un flag env manque : fail-safe.
- Limites CPU/mémoire Swarm.
- Healthchecks cohérents (Docker + Traefik).
- DB TLS : éviter `DB_SSL_REJECT_UNAUTHORIZED=false` en prod si possible (CA).
- Revue SQL dynamic (admin tools).

## 5) Tests & couverture

Constat : couverture encore faible. Priorité sur :
- moteur (TaquinEngine),
- économie,
- auth,
- bonus (daily/arcade),
- endpoints critiques (wallet/ads/payments).

## 6) Plan d’action prioritaire

Phase 1 — URGENT (avant tout lancement)
- Rotation secrets + purge des secrets versionnés.
- Security headers API + frontend.
- Durcir Capacitor release.
- Logger : erreurs visibles en prod.
- Backup DB (et test restore).

Phase 2 — 1–2 semaines
- CI/CD (tests + build + deploy).
- AdMob réel / retrait feature.
- Limites Swarm + healthchecks.
- Monter couverture tests sur les modules critiques.

Phase 3 — 1 mois
- Monitoring (Uptime Kuma minimum).
- Google Play Billing si nécessaire.
- Migrations DB versionnées (outil).
- PWA offline (si objectif).
- Documentation API (OpenAPI).
