BlockLucky Documentation officielle GitHub

Le projet en chiffres

Cette page donne la taille réelle du projet, mesurée dans le dépôt le 12 novembre 2026 sur la branche marceau, fichiers de la refonte des comptes et du mobile, de l'espace Paramètres du mobile et de la dernière série de corrections (ticket de connexion, comptes Mairie, pages légales, scripts Sepolia) compris, y compris ceux qui ne sont pas encore commités. Chaque chiffre est accompagné de la méthode de comptage, pour pouvoir le recalculer après une évolution. Les commandes se lancent depuis la racine du dépôt, dans un terminal Bash (Git Bash sous Windows).

À savoir

Les chiffres de l'API, des variables, de la base, des contrats, de Docker Compose et de la CI sont aussi présents dans les pages générées depuis le code (référence de l'API, variables d'environnement, dictionnaire de données, intégration continue). En cas d'écart, ces pages générées font foi.

Vue d'ensemble

Indicateur Valeur
Routes HTTP de l'API 70, dans 9 modules
Pages du frontend web 35
Écrans de l'application mobile 32
Tables PostgreSQL (modèles Prisma) 11, plus 5 énumérations
Migrations Prisma 6
Variables d'environnement du backend 59
Contrats Solidity de production 2 (BlockLucky, BlockLuckyPOAP)
Lignes Solidity des contrats de production 479 (398 hors lignes vides et commentaires)
Tests automatisés 54 pour les contrats, 108 unitaires et d'intégration pour le backend, 2 sur une vraie chaîne, 21 pour le web, 8 écrits pour le mobile
Événements Socket.IO typés 13 (9 du serveur vers les clients, 4 des clients vers le serveur)
Services Docker Compose 9 (4 par défaut, 5 dans le profil app)
Jobs de CI 11 (10 dans ci.yml, 1 dans codeql.yml)
Commits 427 sur la branche marceau, dont 227 hors fusions

API

70 routes, comptées comme le fait le générateur de la référence de l'API : chaque appel router.get|post|put|patch|delete( des fichiers *.routes.ts.

Terminal
grep -cE "router\.(get|post|put|patch|delete)\(" backend/src/api/*/*.routes.ts

Les 65 routes métier sont servies deux fois : sous /api/v1 (préfixe à utiliser) et sous /api (compatibilité). Les 5 routes système (/health, /health/live, /health/ready, /health/deep, /api/config) sont montées à la racine. /metrics et /api/docs sont montés directement dans backend/src/app.ts et ne sont pas comptés.

Répartition par niveau d'accès : 23 routes publiques (dont les 5 sondes, le webhook signé et les 5 routes d'inscription, de connexion par mot de passe ou Google et de réinitialisation), 27 réservées à un utilisateur connecté, 5 aux rôles PARTNER ou ADMIN, 15 au rôle ADMIN seul.

Interfaces

Frontend web : 35 pages

Une page Next.js (App Router) est un fichier page.tsx sous frontend-web/src/app/.

Terminal
find frontend-web/src/app -name page.tsx | wc -l
Espace Pages
Public (accueil municipal, conditions générales, règlement, mentions légales, confidentialité, traceurs, transparence, connexion, vérification du code, invitation) 10
Citoyen (groupe de routes (citoyen)), dont la vérification d'identité 14
Dashboard Mairie (/mairie), dont la vérification des identités et les comptes 7
Espace partenaire (/partenaire) 4

Les pages d'erreur (error.tsx, global-error.tsx, not-found.tsx) et les trois layout.tsx d'espace ne sont pas comptées. Le détail est dans Pages et espaces.

Application mobile : 32 écrans

Terminal
find mobile-app/src/screens -type f | wc -l

7 écrans d'authentification, 8 de loterie, 4 de boutique, 12 de profil et réglages (dont l'écran Legal des documents légaux) et 1 de parrainage, déclarés dans les navigateurs de mobile-app/src/navigation/. L'application mobile ne couvre que l'espace citoyen : les espaces Mairie et partenaire sont uniquement sur le web. Voir Navigation et écrans.

Office de Tourisme

14 pages HTML statiques à la racine de frontend-office-tourisme/.

Terminal
git ls-files frontend-office-tourisme | grep -cE "^frontend-office-tourisme/[^/]+\.html$"

Données

Élément Valeur Méthode
Modèles Prisma (tables) 11 : User, IdentityDocument, Token, LotteryRound, Ticket, ChainCursor, PointTransaction, Partner, RewardCatalog, ClaimedReward, Analytics grep -c "^model " backend/prisma/schema.prisma
Énumérations 5 : Role, TwoFactorMethod, AgeVerificationStatus, TokenType, Status grep -c "^enum " backend/prisma/schema.prisma
Index et unicités composés 16 attributs @@index ou @@unique grep -cE "@@index|@@unique" backend/prisma/schema.prisma
Contraintes CHECK 5, toutes dans la migration du 9 novembre grep -c CHECK sur les fichiers migration.sql
Migrations 6, du 2 au 12 novembre 2026 ls backend/prisma/migrations
Templates d'email 8, dont staff-invitation ls backend/src/templates/emails

Le détail est dans le modèle de données et la page Migrations.

Configuration

59 variables d'environnement, déclarées dans le schéma Zod de backend/src/config/env.config.ts. Le script npm run env:check du backend vérifie que backend/.env.example contient exactement ces variables. Le frontend web lit 2 variables (NEXT_PUBLIC_API_URL, NEXT_PUBLIC_WS_URL) et l'application mobile 7 (EXPO_PUBLIC_API_URL, EXPO_PUBLIC_WS_URL, EXPO_PUBLIC_SENTRY_DSN, EXPO_PUBLIC_HELP_CENTER_URL et les trois identifiants client Google EXPO_PUBLIC_GOOGLE_IOS_CLIENT_ID, EXPO_PUBLIC_GOOGLE_ANDROID_CLIENT_ID, EXPO_PUBLIC_GOOGLE_WEB_CLIENT_ID, listés vides dans mobile-app/.env.example).

Smart contracts

Fichier Lignes Lignes de code
smart-contract/contracts/BlockLucky.sol 415 350
smart-contract/contracts/BlockLuckyPOAP.sol 64 48
Contrats d'attaque des tests (contracts/test/) 77 60
Tests de fuzzing smart-contract/test/BlockLucky.t.sol 131 114

« Lignes de code » exclut les lignes vides et les lignes de commentaire :

Terminal
grep -cvE '^\s*$|^\s*//|^\s*/?\*' smart-contract/contracts/BlockLucky.sol

BlockLucky déclare 11 événements et 18 erreurs personnalisées ; BlockLuckyPOAP 2 événements et 3 erreurs. Avec les éléments hérités d'OpenZeppelin et de Chainlink, l'ABI de BlockLucky expose 46 fonctions, 19 événements et 26 erreurs. Le contrat est compilé avec Solidity 0.8.34 (smart-contract/hardhat.config.ts).

Tests

Un cas de test est un appel it( ou test( (TypeScript) ou une fonction test... (Solidity).

Terminal
grep -cE "^\s*(it|test)\(\s*['\"\`]" backend/__tests__/*/*.ts
Projet Fichiers Cas Commande
Smart contracts 4 54 : 38 dans BlockLucky.test.ts, 5 dans BlockLuckyPOAP.test.ts, 7 dans roles.test.ts, 4 fuzzing dans BlockLucky.t.sol npm test
Backend, unitaires et intégration 19 108 npm test
Backend, vraie blockchain locale 1 2 npm run test:chain
Frontend web 3 21 npm test
Application mobile 3 8 aucune

Attention

Les 8 tests de l'application mobile (mobile-app/__tests__/) ne peuvent pas s'exécuter : mobile-app/package.json ne déclare ni script test ni dépendance Jest, et la CI mobile se limite au typecheck, au lint et à la validation de la configuration Expo. Voir Dette technique et limites.

La couverture des contrats de production est de 100 % des lignes, contrôlée par npm run coverage:check (smart-contract/scripts/check-coverage.mjs). Le détail des suites est dans Tests, fuzzing et couverture et Tests du backend.

Temps réel

13 événements sont typés dans backend/src/types/socket.types.ts : 9 du serveur vers les clients et 4 des clients vers le serveur (draw:join, draw:leave, chat:send, chat:react).

Le serveur n'émet réellement que 5 des 9 événements déclarés : draw:waiting-room, draw:winner, chat:message, chat:reaction et points:awarded. Les événements draw:countdown, draw:started, queue:position et network:fallback sont déclarés mais jamais émis ni écoutés.

Terminal
grep -rnoE "emit\(\s*'[a-z:-]+'" backend/src | sort -u

Infrastructure

Élément Valeur
Services Docker Compose 9 : postgres, redis, mailpit, blockchain par défaut ; migrate, backend, worker, web, tourisme dans le profil app
Dockerfile 4 : backend (cibles migrator et runtime), frontend web, Office de Tourisme, blockchain locale
Jobs de CI 10 dans .github/workflows/ci.yml : détection des projets modifiés, gitleaks, documentation, backend, contrats, intégration sur vraie chaîne, web, mobile, Office de Tourisme, images Docker ; 1 dans .github/workflows/codeql.yml
Scénarios de charge k6 2 scripts (smoke.js, load.js avec 4 profils) dans load-tests/

Code source

Fichiers TypeScript et JavaScript versionnés, hors tests et hors configuration :

Dossier Lignes
backend/src/ 10 310
frontend-web/src/ 13 297
mobile-app/src/ 19 647
smart-contract/scripts/ 1 033
frontend-office-tourisme/ (JavaScript) 4 010
Terminal
(git ls-files backend/src; git ls-files --others --exclude-standard backend/src) | grep -E '\.(ts|tsx|js|mjs)$' | xargs cat | wc -l

Le dépôt compte 693 fichiers, versionnés ou non encore commités, hors dossier documentation-officielle/ et hors cache local mobile-app/.expo/.

Historique Git

Indicateur Valeur Commande
Commits sur la branche marceau 427 git rev-list --count HEAD
Commits hors fusions 227 git log --no-merges --oneline | wc -l
Fusions de pull requests 200 git log --merges --oneline | wc -l
Premier commit 2 novembre 2026 git log --reverse --format=%ad --date=short | head -1
Dernier commit 12 novembre 2026 git log -1 --format=%ad --date=short
Jours avec au moins un commit 6 (2, 3, 9, 10, 11 et 12 novembre) git log --format=%ad --date=short | sort -u

Tous les commits de la branche sont signés du même auteur Git ; seuls 12 commits de Dependabot existent sur d'autres branches distantes. Les livrables UX, marketing et budget de l'équipe sont des documents PDF hors dépôt. Les grandes étapes sont résumées dans Historique et feuille de route.