# Application Web

## Stack

Frontend:
- React
- TypeScript
- Vite

Backend:
- Java
- Spring Boot
- Spring Data JPA
- Spring Security

Database:
- PostgreSQL

## Architecture

frontend/
    React application

backend/
    Spring Boot REST API

## Règles générales

- Comprendre l'architecture existante avant de modifier le code.
- Ne pas réécrire du code qui fonctionne.
- Faire des modifications ciblées.
- Ne pas modifier plusieurs fonctionnalités en même temps.
- Ne pas installer de dépendances sans raison.
- Ne pas supprimer de fichiers sans demander confirmation.
- Ne pas modifier la base de production.
- Ne jamais exposer de secrets ou variables .env.
- Réutiliser les composants existants.
- Respecter l'architecture actuelle.

## Frontend

- Utiliser les composants React existants.
- Utiliser TypeScript.
- Éviter les composants inutilement complexes.
- Ne pas créer une nouvelle librairie pour une fonctionnalité simple.
- Respecter le système de design existant.

## Backend

- Architecture REST.
- Respecter les couches Controller / Service / Repository.
- Utiliser DTO lorsque nécessaire.
- Ne pas mettre de logique métier dans les Controllers.
- Utiliser les validations Bean Validation.
- Respecter les conventions Spring Boot existantes.

## PostgreSQL

- Ne pas modifier le schéma directement sans vérifier les migrations.
- Vérifier les relations et contraintes avant de modifier une entité.
- Éviter les requêtes N+1.
- Ajouter des index uniquement lorsqu'ils sont justifiés.

## Tests

Frontend:
- npm test
- npm run lint

Backend:
- ./mvnw test

Avant de terminer une tâche:
- vérifier les erreurs TypeScript
- vérifier le lint
- lancer les tests concernés
- vérifier que le backend compile

## Gestion du contexte

IMPORTANT:

- Ne pas analyser tout le projet pour une petite tâche.
- Lire uniquement les fichiers nécessaires.
- Ne pas lire node_modules.
- Ne pas lire target.
- Ne pas lire .git.
- Ne pas lire les fichiers générés.
- Ne pas modifier de fichiers non liés à la tâche.

## Style de réponse

Avant de coder:
1. Identifier les fichiers concernés.
2. Expliquer brièvement le plan.
3. Modifier uniquement ce qui est nécessaire.

Après le code:
1. Résumer les changements.
2. Indiquer les tests exécutés.
3. Indiquer les éventuels problèmes restants.