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

43 lines
No EOL
2.3 KiB
Markdown

# 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.