Statut
Document de référence — v1.0 — relu le 2026-05-10.
Backend Laravel (PHP)
Classes et fichiers
| Élément | Convention | Exemple |
|---|
| Modèles | PascalCase singulier | Acteur, FeatureTab, PlayloopDevice |
| Contrôleurs | PascalCase + Controller | ActeurController, AuthController |
| Services | PascalCase + Service | ActeurWriteService, SupabaseTokenService |
| DTOs | PascalCase + DTO | DocumentDTO, MediaDTO |
| Requests | PascalCase + Request | AddDocumentRequest, ExchangeTokenRequest |
| Jobs | PascalCase impératif | ExpireBoosts, ExpireAlertes |
| Policies | PascalCase + Policy | ActeurPolicy |
| Middlewares | PascalCase + descriptif | EnsureUserIsAdmin, EnsureMairieAccess |
| Providers | PascalCase + ServiceProvider | IdentityServiceProvider |
| Exceptions | PascalCase + Exception | ScopeViolationException |
Méthodes et propriétés
| Élément | Convention | Exemple |
|---|
| Méthodes | camelCase | isEnabledFor(), buildCurrentUser() |
| Propriétés | camelCase | $acteurId, $isGlobal |
| Constantes | SCREAMING_SNAKE_CASE | ALLOWED_SOURCES |
| Scopes Eloquent | camelCase préfixé scope | scopePinned(), scopeEnabled() |
Base de données
| Élément | Convention | Exemple |
|---|
| Tables | snake_case pluriel | feature_tabs, feature_tab_overrides |
| Colonnes | snake_case | acteur_id, is_pinned, order_idx |
| Clés étrangères | {table_singulier}_id | acteur_id, tab_id |
| Migrations | {timestamp}_{action}_{table} | 0001_create_actors_table |
Routes
| Élément | Convention | Exemple |
|---|
| URLs | kebab-case + préfixe /api/v1/ | /api/v1/feature-tabs, /api/v1/auth/exchange |
| Noms de routes | dot.notation | acteur.show, auth.exchange |
Frontend (React)
dmv-public utilise TypeScript (.tsx, .ts). dmv_backoffice utilise JSX (.jsx, .js).
Fichiers et dossiers
| Élément | Convention | Exemple |
|---|
| Composants | PascalCase | ActeurCard.tsx (dmv-public), ActeurCard.jsx (backoffice) |
| Hooks | camelCase préfixé use | useActeur.ts / useActeur.js |
| Utilitaires | camelCase | formatDate.ts, slugify.js |
| Types / interfaces | PascalCase (TypeScript uniquement) | Acteur, CurrentUser, ApiResponse |
| Constantes | SCREAMING_SNAKE_CASE | MAX_FILE_SIZE, API_BASE_URL |
| Dossiers | kebab-case | actor-card/, shared-components/ |
Variables et fonctions
| Élément | Convention | Exemple |
|---|
| Variables | camelCase | acteurId, isLoading |
| Fonctions | camelCase | fetchActeur(), handleSubmit() |
| Props React | camelCase | onPress, isVisible |
| Événements | on + PascalCase | onClick, onSubmit |
Variables d'environnement
| Contexte | Convention | Exemple |
|---|
| Laravel (backend) | SCREAMING_SNAKE_CASE | APP_KEY, SUPABASE_URL, RESEND_KEY |
| Vite (frontend) | VITE_ + SCREAMING_SNAKE_CASE | VITE_API_URL, VITE_SUPABASE_KEY |
| Next.js (public) | NEXT_PUBLIC_ + SCREAMING_SNAKE_CASE | NEXT_PUBLIC_SUPABASE_URL |
| Next.js (serveur) | SCREAMING_SNAKE_CASE | SUPABASE_SERVICE_KEY |
Documentation (Markdown / Docusaurus)
| Élément | Convention | Exemple |
|---|
| Fichiers | {nn}-{slug}.md | 01-overview.md, 14-feature-flags.md |
| Dossiers | {nn}-{slug}/ | 06-architecture/, 12-apps/ |
| Titres | Français, sans majuscules superflues | # Gestion des erreurs |
| Tableaux | Colonnes courtes, contenu concis | Voir ce document |
Points à clarifier
- Convention de nommage des variables Vite dans les apps futures (PlayLoop, Mairie, AssoSuite).
- Préfixes de colonnes pour les tables de modules multiples (éviter les collisions).
- Convention d'import des modules dans les services (interfaces vs classes concrètes).