Style de code
TypeScript strict, validation Zod, architecture en couches et formatage Biome.
TypeScript strict
Le code est en TypeScript strict. Pas de any, l'inférence est privilégiée partout où elle suffit. Un type explicite est réservé aux frontières (signatures publiques, contrats d'API), là où il documente une intention.
// Éviter
function total(items: any) {
return items.reduce((a: any, b: any) => a + b.price, 0);
}
// Préférer
function total(items: readonly LineItem[]): number {
return items.reduce((sum, item) => sum + item.price, 0);
}Validation Zod sur toute entrée
Toute donnée qui entre dans le système est validée par Zod : corps de requête, paramètres, formulaires, variables d'environnement. Une entrée non validée est un bug en attente.
Les variables d'environnement passent par packages/env, qui valide au démarrage avec Zod. Une variable manquante fait échouer le boot, jamais une requête en production.
Un fichier, une responsabilité
Chaque fichier a une raison d'exister claire. La séparation en couches est stricte.
| Couche | Rôle | Ne fait pas |
|---|---|---|
| Route | Valide l'entrée, applique les garde-fous, délègue | Logique métier |
| Service | Logique métier | Accès direct à la base |
| Repository | Accès aux données via Drizzle | Décisions métier |
La route ne contient jamais de logique métier, elle la délègue au service. Le service ne touche jamais la base directement, il passe par un repository.
Formatage avec Biome
Biome gère le lint et le formatage. Les règles clés :
- indentation en 2 espaces, guillemets doubles ;
- import triés automatiquement ;
- pas de placeholder ni de
TODOdans le code livré.
bun run check # biome check --write sur tout le dépôtLe formatage n'est pas une question de goût, il est décidé par l'outil pour que personne n'ait à en débattre.