mediaDrop/Claude.md
Nicolas fe8bd26bb7 Initial commit: mediaDrop — serveur de dépôt de fichiers médias
Serveur TypeScript (Fastify 5) permettant de déposer des fichiers médias
dans des dossiers nommés, via une page web de glisser-déposer.

- Authentification OpenID Connect gérée côté serveur (Authorization Code +
  PKCE, client confidentiel, openid-client) ; session via cookie chiffré
  (@fastify/secure-session).
- Configuration dans un fichier JSON (schéma fourni) ; l'environnement ne
  porte que le pointeur MEDIADROP_CONFIG.
- Cibles de dépôt nommées : liste { name, label, dir }, sélection par
  ?target=, première cible par défaut.
- Upload multipart en streaming : nom de fichier dérivé côté serveur (pas
  de path traversal), liste blanche de types MIME, plafond de taille.
- TypeScript strict, ESLint + Prettier sans warning, 46 tests Vitest.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-09 23:06:53 +02:00

2.3 KiB

Directives de Développement TypeScript & Qualité

1. Principes Généraux

  • Qualité & Solidité : Code propre, explicite, auto-documenté. Pas de hacks ou de contournements temporaires.
  • DRY & KISS : Préférer la lisibilité et la simplicité à l'abstraction prématurée.
  • Sécurité : Validation systématique des données aux frontières de l'application (pas de données non vérifiées). Aucune clé ou secret en dur.

2. Standards TypeScript & Typage Strict

  • Typage strict :
    • noImplicitAny et strictNullChecks activés.
    • Interdiction d'utiliser le type any. Utiliser unknown avec du narrowing (type guards) si le type est incertain.
    • Préférer les interface pour les objets publics/extensibles et les type pour les unions, intersections et tuples.
    • Expliciter les types de retour des fonctions publiques et des méthodes d'API.
  • Conventions de nommage :
    • PascalCase pour les types, interfaces, classes et composants React/Vue.
    • camelCase pour les variables, fonctions et méthodes.
    • SNAKE_CASE pour les constantes globales.
    • Interfaces : Ne pas utiliser le préfixe I (écrire User, pas IUser).
  • Gestion de l'asynchronisme :
    • Préférer async/await aux promesses chaînées (.then()).
    • Toujours typer le retour des fonctions asynchrones : Promise<T>.

3. Qualité, Linting & Formattage

  • Structure : Fichiers ciblés et courts (< 200-300 lignes). Découper en modules si nécessaire.
  • Linter & Formateur : Le code doit passer sans aucun warning ni erreur sous ESLint et Prettier.
  • Gestion des erreurs :
    • Pas de try/catch vides.
    • Utiliser des classes d'erreur personnalisées dérivant de Error.

4. Tests

  • Règle absolue : Tout nouveau code ou correctif doit être accompagné de ses tests (ex. Vitest ou Jest).
  • Exécuter la suite de tests avant toute validation.

5. Commandes du Projet

  • Installation : npm install (ou pnpm install / yarn install)
  • Vérification de type : npx tsc --noEmit
  • Linter : npm run lint
  • Tests : npm test
  • Build : npm run build

6. Format des Réponses de Claude

  • Proposer du code complet et directement exploitable.
  • Expliciter les choix de typage ou de refactorisation complexes.