diff --git a/CLAUDE.md b/CLAUDE.md index 1b267ab..d108fb4 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -12,22 +12,23 @@ Application de gestion de projet. Monorepo Symfony 8 (API Platform 4) + Nuxt 4. ## Structure ``` -src/Entity/ # Entités Doctrine (User, Client, Project, Task, TaskStatus, TaskEffort, TaskPriority, TaskTag, TaskGroup, TimeEntry) +src/Entity/ # Entités Doctrine (User, Client, Project, Task, TaskStatus, TaskEffort, TaskPriority, TaskTag, TaskGroup, TimeEntry, GiteaConfiguration) src/ApiResource/ # Ressources API Platform (si découplées des entités) -src/State/ # Providers et Processors API Platform (MeProvider, AppVersionProvider, ActiveTimeEntryProvider, UserPasswordHasherProcessor, TaskNumberProcessor) +src/State/ # Providers et Processors API Platform (MeProvider, AppVersionProvider, ActiveTimeEntryProvider, UserPasswordHasherProcessor, TaskNumberProcessor, Gitea*Provider, Gitea*Processor) src/Repository/ # Repositories Doctrine src/DataFixtures/ # Fixtures config/ # Config Symfony (security, api_platform, lexik_jwt, nelmio_cors, doctrine) config/jwt/ # Clés JWT (private.pem, public.pem) migrations/ # Migrations Doctrine docs/plans/ # Plans d'implémentation +docs/superpowers/ # Plans et specs superpowers frontend/ # App Nuxt 4 -frontend/pages/ # Pages (index, login, projects, projects/[id], projects/[id]/groups, projects/[id]/archives, time-tracking, admin) +frontend/pages/ # Pages (index, login, my-tasks, projects, projects/[id], projects/[id]/groups, projects/[id]/archives, time-tracking, admin) frontend/layouts/ # Layouts (pas "layout") -frontend/components/ # Composants Vue (AppTopNav, AppDrawer, ColorPicker, DataTable, ClientDrawer, ProjectDrawer, ProjectGroupTab, TaskCard, TaskDrawer, TaskModal, TaskEffortDrawer, TaskGroupDrawer, TaskPriorityDrawer, TaskStatusDrawer, TaskTagDrawer, Admin*Tab, SidebarLink, SidebarTimer, TimeEntryBlock, TimeEntryContextMenu, TimeEntryDrawer, TimeEntryList, TimeTrackingCalendar, UserDrawer, ConfirmDeleteStatusModal, ConfirmDeleteTaskModal) +frontend/components/ # Composants Vue organisés en sous-dossiers (ui/, client/, project/, task/, user/, admin/, time-tracking/) frontend/composables/# Composables (useApi, useAppVersion) frontend/stores/ # Stores Pinia (auth, ui, timer) -frontend/services/ # Services API (auth, clients, projects, tasks, task-statuses, task-efforts, task-groups, task-priorities, task-tags, users, time-entries) +frontend/services/ # Services API (auth, clients, gitea, projects, tasks, task-statuses, task-efforts, task-groups, task-priorities, task-tags, users, time-entries) frontend/services/dto/ # Types TypeScript frontend/i18n/locales/ # Fichiers de traduction (langDir résolu depuis i18n/) ``` diff --git a/src/Service/GiteaApiService.php b/src/Service/GiteaApiService.php index fa26d8c..d8bfb0f 100644 --- a/src/Service/GiteaApiService.php +++ b/src/Service/GiteaApiService.php @@ -133,17 +133,21 @@ final readonly class GiteaApiService /** * @return array */ - public function listCommits(Project $project, string $branch): array + public function listBranchCommits(Project $project, string $branch): array { $this->assertProjectHasRepo($project); - return $this->request('GET', sprintf( - '/api/v1/repos/%s/%s/commits', + $defaultBranch = $this->getDefaultBranch($project); + + $data = $this->request('GET', sprintf( + '/api/v1/repos/%s/%s/compare/%s...%s', $project->getGiteaOwner(), $project->getGiteaRepo(), - ), [ - 'query' => ['sha' => $branch, 'limit' => 30], - ]); + $defaultBranch, + urlencode($branch), + )); + + return $data['commits'] ?? []; } /** diff --git a/src/State/GiteaBranchProvider.php b/src/State/GiteaBranchProvider.php index 62ebde1..5081dd0 100644 --- a/src/State/GiteaBranchProvider.php +++ b/src/State/GiteaBranchProvider.php @@ -50,7 +50,7 @@ final readonly class GiteaBranchProvider implements ProviderInterface $dto->name = $branch['name']; try { - $commits = $this->giteaApiService->listCommits($project, $branch['name']); + $commits = $this->giteaApiService->listBranchCommits($project, $branch['name']); $dto->commits = array_map(static fn (array $c): array => [ 'sha' => substr($c['sha'] ?? '', 0, 7), 'message' => $c['commit']['message'] ?? '',