From 92555090420a562cdd4257342fc7664b8a26497c Mon Sep 17 00:00:00 2001 From: "ext.jeremy.guillot@maxicoffee.domains" Date: Mon, 30 Jun 2025 20:00:09 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20ajout=20de=20la=20fonctionnalit=C3=A9?= =?UTF-8?q?=20d'=C3=A9dition=20des=20mangas,=20incluant=20la=20cr=C3=A9ati?= =?UTF-8?q?on=20d'un=20modal=20d'=C3=A9dition,=20la=20mise=20=C3=A0=20jour?= =?UTF-8?q?=20de=20l'API=20pour=20g=C3=A9rer=20les=20modifications,=20et?= =?UTF-8?q?=20l'int=C3=A9gration=20de=20la=20logique=20de=20gestion=20des?= =?UTF-8?q?=20erreurs.=20Tests=20ajout=C3=A9s=20pour=20valider=20le=20bon?= =?UTF-8?q?=20fonctionnement=20de=20l'=C3=A9dition.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../infrastructure/api/apiMangaRepository.js | 19 + .../components/MangaEditModal.vue | 371 ++++++++++++++++++ .../presentation/composables/useMangaEdit.js | 48 +++ .../manga/presentation/pages/MangaDetails.vue | 35 +- public/api-docs.json | 109 +++++ .../Manga/Application/Command/EditManga.php | 18 + .../CommandHandler/CreateMangaHandler.php | 6 +- .../CommandHandler/EditMangaHandler.php | 59 +++ .../QueryHandler/GetMangaByIdHandler.php | 3 +- .../Application/Response/MangaResponse.php | 1 + src/Domain/Manga/Domain/Model/Manga.php | 43 +- .../ApiPlatform/Dto/MangaDetail.php | 1 + .../Resource/EditMangaResource.php | 55 +++ .../State/Processor/EditMangaProcessor.php | 48 +++ .../Provider/GetMangaBySlugStateProvider.php | 3 +- .../State/Provider/GetMangaStateProvider.php | 1 + .../Persistence/LegacyMangaRepository.php | 26 +- .../CommandHandler/EditMangaHandlerTest.php | 170 ++++++++ tests/Feature/Manga/EditMangaTest.php | 174 ++++++++ .../Feature/Reader/GetChapterContextTest.php | 6 + 20 files changed, 1185 insertions(+), 11 deletions(-) create mode 100644 assets/vue/app/domain/manga/presentation/components/MangaEditModal.vue create mode 100644 assets/vue/app/domain/manga/presentation/composables/useMangaEdit.js create mode 100644 src/Domain/Manga/Application/Command/EditManga.php create mode 100644 src/Domain/Manga/Application/CommandHandler/EditMangaHandler.php create mode 100644 src/Domain/Manga/Infrastructure/ApiPlatform/Resource/EditMangaResource.php create mode 100644 src/Domain/Manga/Infrastructure/ApiPlatform/State/Processor/EditMangaProcessor.php create mode 100644 tests/Domain/Manga/Application/CommandHandler/EditMangaHandlerTest.php create mode 100644 tests/Feature/Manga/EditMangaTest.php diff --git a/assets/vue/app/domain/manga/infrastructure/api/apiMangaRepository.js b/assets/vue/app/domain/manga/infrastructure/api/apiMangaRepository.js index c6f6fcc..11c2ebd 100644 --- a/assets/vue/app/domain/manga/infrastructure/api/apiMangaRepository.js +++ b/assets/vue/app/domain/manga/infrastructure/api/apiMangaRepository.js @@ -174,6 +174,25 @@ export class ApiMangaRepository { } } + async editManga(mangaId, updateData) { + try { + const response = await fetch(`/api/mangas/${mangaId}/edit`, { + method: 'PUT', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify(updateData) + }); + if (!response.ok) { + throw new Error('Failed to edit manga'); + } + return await response.json(); + } catch (error) { + console.error('API Error:', error); + throw error; + } + } + async deleteChapter(chapterId) { try { const response = await fetch(`/api/manga/chapters/${chapterId}/cbz`, { diff --git a/assets/vue/app/domain/manga/presentation/components/MangaEditModal.vue b/assets/vue/app/domain/manga/presentation/components/MangaEditModal.vue new file mode 100644 index 0000000..d6cbea7 --- /dev/null +++ b/assets/vue/app/domain/manga/presentation/components/MangaEditModal.vue @@ -0,0 +1,371 @@ +