From 318f14ea88d8e40c23e9b50da6493754ee363366 Mon Sep 17 00:00:00 2001 From: matthieu Date: Sun, 15 Mar 2026 22:21:12 +0100 Subject: [PATCH] docs : update CLAUDE.md with avatar feature context and gotchas Co-Authored-By: Claude Opus 4.6 (1M context) --- CLAUDE.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 678107b..6ca49b1 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -16,7 +16,7 @@ src/Entity/ # Entités Doctrine (User, Client, Project, Task, TaskStatu src/ApiResource/ # Ressources API Platform (si découplées des entités) src/State/ # Providers et Processors API Platform (MeProvider, AppVersionProvider, ActiveTimeEntryProvider, UserPasswordHasherProcessor, TaskNumberProcessor, ClientTicket*Provider/Processor, NotificationProvider, Gitea*Provider, Gitea*Processor) src/Service/ # Services métier (NotificationService) -src/Controller/ # Controllers custom Symfony (NotificationUnreadCountController, MarkAllReadController) +src/Controller/ # Controllers custom Symfony (NotificationUnreadCountController, MarkAllReadController, UserAvatarController, TaskDocumentDownloadController) src/Mcp/Tool/ # MCP tools organisés par domaine (Project/, Task/, TaskMeta/, TimeEntry/, Reference/) src/Security/ # Authenticators custom (ApiTokenAuthenticator pour MCP HTTP) src/Command/ # Commandes console (GenerateApiTokenCommand) @@ -28,10 +28,10 @@ migrations/ # Migrations Doctrine docs/plans/ # Plans d'implémentation docs/superpowers/ # Plans et specs superpowers frontend/ # App Nuxt 4 -frontend/pages/ # Pages (index, login, my-tasks, projects, projects/[id], projects/[id]/groups, projects/[id]/archives, time-tracking, admin, portal/, portal/projects/[id], portal/projects/[id]/new-ticket) +frontend/pages/ # Pages (index, login, my-tasks, profile, projects, projects/[id], projects/[id]/groups, projects/[id]/archives, time-tracking, admin, portal/, portal/projects/[id], portal/projects/[id]/new-ticket) frontend/layouts/ # Layouts (default, portal) frontend/components/ # Composants Vue organisés en sous-dossiers (ui/, client/, project/, task/, user/, admin/, time-tracking/, client-ticket/, notification/) -frontend/composables/# Composables (useApi, useAppVersion, useNotifications, useClientTicketHelpers) +frontend/composables/# Composables (useApi, useAppVersion, useNotifications, useClientTicketHelpers, useAvatarService) frontend/stores/ # Stores Pinia (auth, ui, timer) frontend/services/ # Services API (auth, clients, gitea, projects, tasks, task-statuses, task-efforts, task-groups, task-priorities, task-tags, users, time-entries, client-tickets, notifications, task-documents) frontend/services/dto/ # Types TypeScript @@ -80,6 +80,8 @@ Exemples : `feat : add login page`, `fix(auth) : prevent null token crash` - PostgreSQL : `LIKE` sur colonne JSON ne marche pas → utiliser `roles::text LIKE` via native SQL - Controllers custom sous `/api/` : ajouter `priority: 1` sur `#[Route]` pour éviter le conflit avec API Platform `{id}` - Serialization : pour embarquer une relation (pas IRI), ajouter le groupe du parent aux propriétés de l'entité cible +- Upload fichiers : utiliser `$file->getMimeType()` (pas `getClientMimeType()`) pour valider côté serveur — nécessite `symfony/mime` +- Auth endpoints mixtes (ROLE_USER + ROLE_CLIENT) : utiliser `#[IsGranted('IS_AUTHENTICATED_FULLY')]` au lieu d'un rôle spécifique ### Frontend