My App
Conventions

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.

CoucheRôleNe fait pas
RouteValide l'entrée, applique les garde-fous, délègueLogique métier
ServiceLogique métierAccès direct à la base
RepositoryAccès aux données via DrizzleDé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 TODO dans le code livré.
bun run check   # biome check --write sur tout le dépôt

Le formatage n'est pas une question de goût, il est décidé par l'outil pour que personne n'ait à en débattre.

On this page