Commit Graph

349 Commits

Author SHA1 Message Date
487f400418 Merge pull request 'refactor(reader): serve pages as static files instead of base64' (#4) from feat/reader-static-images into main
All checks were successful
Build and Deploy / deploy (push) Successful in 1m23s
Reviewed-on: #4
2026-03-09 22:07:34 +01:00
ext.jeremy.guillot@maxicoffee.domains
322c396165 refactor(reader): serve pages as static files instead of base64
Replace the per-page API call (base64 payload) with static image URLs
served directly by Caddy from public/images/pages/{chapterId}/.

- LocalImageStorage now stores to public/images/ (was MANGA_DATA_PATH)
- LegacyChapterRepository returns /images/pages/{id}/{file} URLs,
  uses getimagesize() instead of loading file content into memory
- Delete GetChapterPage query/handler/response, ChapterPageResource,
  ChapterPageProvider, PageContent model
- Remove getPageContent() from ChapterRepositoryInterface
- Frontend: loadChapter() fetches chapter + all pages in parallel,
  ReaderPage uses URL instead of base64 data URI, InfiniteReader drops
  lazy-load observer side effect, readerStore drops loadedPages/preload
- GetChapterPagesTest: extract fixture images from CBZ at runtime,
  ignore tests/Fixtures/pages/ in .gitignore

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-09 22:05:45 +01:00
6875ad4222 Merge pull request 'refactor(scraping): DDD refactoring — stockage images individuelles' (#3) from feat/scraping-ddd-image-storage into main
All checks were successful
Build and Deploy / deploy (push) Successful in 1m42s
Reviewed-on: #3
2026-03-09 20:53:15 +01:00
ext.jeremy.guillot@maxicoffee.domains
c311cfe80c refactor(scraping): DDD refactoring — stockage images individuelles
Le domaine Scraping ne génère plus d'archives CBZ ni ne modifie les
entités du domaine Manga directement. Il scrape, stocke les images
individuellement, et émet un événement partagé.

- Suppression : CbzGeneratorInterface, CbzGenerator, CbzGenerationRequest,
  CbzPath, CbzGenerationException
- Suppression : save() de ChapterRepositoryInterface (Scraping)
- Suppression : cbzPath du modèle Chapter (Scraping)
- Ajout : ImageStorageInterface + LocalImageStorage
  (stockage dans {MANGA_DATA_PATH}/pages/{chapterId}/)
- ScrapeChapterHandler utilise ImageStorage au lieu du générateur CBZ

- ChapterScraped déplacé dans Domain/Shared/Domain/Event/
  avec jobId, chapterId, pagesDirectory, pageCount
- Routing Messenger ajouté

- Ajout : ChapterScrapedEventListener + ChapterScrapedMessageHandler
  pour mettre à jour Chapter.pagesDirectory via le Repository Manga

- LegacyChapterRepository en dual-mode :
  pagesDirectory en priorité, fallback cbzPath (backward compat)
- Requêtes prev/next : filtrent pagesDirectory IS NOT NULL OR cbzPath IS NOT NULL
- ChapterContext expose pagesDirectory

- phparkitect.php : App\Domain\Shared\Domain\Event autorisé dans
  les couches Application (correction violations pré-existantes
  ChapterImported/VolumeImported + nouvelle ChapterScraped)

- 218/218 tests passent (+3 nouveaux)
- InMemoryImageStorage créé pour les tests unitaires

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-09 20:52:16 +01:00
ext.jeremy.guillot@maxicoffee.domains
d444f86315 Merge branch 'main' of ssh://git.homelab.nestor-server.fr:2222/colgora/Mangarr
All checks were successful
Build and Deploy / deploy (push) Successful in 1m46s
# Conflicts:
#	src/Domain/Manga/Application/CommandHandler/DeleteChapterHandler.php
#	src/Domain/Manga/Application/CommandHandler/EditMultipleChaptersHandler.php
#	src/Domain/Manga/Application/EventListener/ChapterImportedEventListener.php
#	src/Domain/Manga/Application/EventListener/VolumeImportedEventListener.php
#	src/Domain/Manga/Application/Response/ChapterResponse.php
#	src/Domain/Manga/Infrastructure/ApiPlatform/State/Provider/DeleteCbzProvider.php
#	src/Domain/Manga/Infrastructure/ApiPlatform/State/Provider/DeleteChapterProvider.php
#	src/Domain/Manga/Infrastructure/Persistence/Repository/LegacyChapterRepository.php
2026-03-09 20:47:43 +01:00
ext.jeremy.guillot@maxicoffee.domains
7506a7a3c1 style: apply php-cs-fixer formatting (PSR-12)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-09 20:46:59 +01:00
4cd277aec7 Merge pull request 'fix(migration): DROP INDEX IF EXISTS pour messenger_messages' (#2) from feat/chapter-entity-image-storage into main
All checks were successful
Build and Deploy / deploy (push) Successful in 1m36s
Reviewed-on: #2
2026-03-09 19:36:19 +01:00
ext.jeremy.guillot@maxicoffee.domains
640d1cec82 fix(migration): DROP INDEX IF EXISTS pour messenger_messages
Les index idx_available_at/idx_delivered_at/idx_queue_available/idx_queue_name
n'existent pas sur tous les environnements. IF EXISTS évite l'erreur 42704.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-09 19:33:26 +01:00
02760effe6 Merge pull request 'feat/chapter-entity-image-storage' (#1) from feat/chapter-entity-image-storage into main
All checks were successful
Build and Deploy / deploy (push) Successful in 1m7s
Reviewed-on: #1
2026-03-09 19:25:22 +01:00
ext.jeremy.guillot@maxicoffee.domains
b52b27189d docs(claude): mise à jour skill testing-strategy
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-09 19:17:12 +01:00
ext.jeremy.guillot@maxicoffee.domains
ff451855a7 fix(manga): ChapterResponse.createdAt en string RFC3339
- ChapterResponse expose createdAt comme string formatée (RFC3339)
- GetMangaChaptersHandler formate la date à la construction du DTO
- GetMangaChaptersStateProvider adapté en conséquence

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-09 19:16:26 +01:00
ext.jeremy.guillot@maxicoffee.domains
2c051351a8 refactor(manga): Chapter entité DDD de Manga + AggregateRoot
- Ajoute AggregateRoot dans Shared (domain events + pull pattern)
- Manga extends AggregateRoot, devient vrai aggregate root DDD
- Chapter passe de readonly à entité mutable avec MangaId VO
- Manga expose les méthodes domaine pour toute mutation de chapitre :
  addChapter, updateChapterTitle/Volume/Pages, hideChapter, removeChapterPages
- Supprime saveChapter/updateChapter/deleteChapter de MangaRepositoryInterface
- save(Manga) gère désormais la persistance des chapitres via pull pattern
- Tous les handlers/listeners passent par l'agrégat (plus d'accès direct)
- phparkitect autorise AggregateRoot dans les couches Domain

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-09 19:15:11 +01:00
ext.jeremy.guillot@maxicoffee.domains
a4b3d8a5f1 test(manga): ajout test regression GET /api/mangas avec chapitres
Détecte le crash EAGER loading Doctrine si la colonne pages_directory
est absente de la table chapter (SQLSTATE 42703).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-09 18:07:34 +01:00
ext.jeremy.guillot@maxicoffee.domains
c50f1638ee refactor(manga): merge ChapterRepositoryInterface into MangaRepositoryInterface + pagesDirectory
- Supprime ChapterRepositoryInterface du domaine Manga (et ses implémentations
  LegacyChapterRepository et InMemoryChapterRepository)
- Déplace toutes les méthodes chapter vers MangaRepositoryInterface avec nommage
  explicite (findChapterById, findVisibleChapterById, updateChapter, deleteChapter, etc.)
- Remplace cbzPath par pagesDirectory + pageCount dans le modèle Chapter
  (transition : toChapterDomain conserve un fallback cbzPath pour les données existantes,
  updateChapter synchronise les deux colonnes jusqu'à la Phase 4)
- Ajoute la migration Doctrine (pages_directory, page_count sur la table chapter)
- Met à jour tous les handlers, listeners, query handlers et state providers du domaine
  Manga pour injecter uniquement MangaRepositoryInterface
- Adapte les tests unitaires et InMemoryMangaRepository avec les nouvelles méthodes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-09 17:54:35 +01:00
ext.jeremy.guillot@maxicoffee.domains
dae215dd3d feat: ajout de claude + correction des tests
All checks were successful
Build and Deploy / deploy (push) Successful in 9m36s
2026-03-09 17:09:31 +01:00
ext.jeremy.guillot@maxicoffee.domains
b5a832fbbc fix: delete manga
All checks were successful
Build and Deploy / deploy (push) Successful in 1m2s
2026-02-11 16:27:11 +01:00
ext.jeremy.guillot@maxicoffee.domains
f75b535426 fix: .env.example MESSENGER_DSN
All checks were successful
Build and Deploy / deploy (push) Successful in 52s
2026-02-11 16:13:01 +01:00
ext.jeremy.guillot@maxicoffee.domains
74e321bc50 fix: .env.example CORS_ALLOW_ORIGIN
All checks were successful
Build and Deploy / deploy (push) Successful in 50s
2026-02-11 16:06:01 +01:00
ext.jeremy.guillot@maxicoffee.domains
20f1211d5b fix: .env.example placeholders
All checks were successful
Build and Deploy / deploy (push) Successful in 1m38s
2026-02-11 16:00:38 +01:00
ext.jeremy.guillot@maxicoffee.domains
eafcc58d84 feat: cp du env.example
Some checks failed
Build and Deploy / deploy (push) Failing after 2m54s
2026-02-11 15:53:17 +01:00
ext.jeremy.guillot@maxicoffee.domains
c18f3653b8 feat: ignore .env
Some checks failed
Build and Deploy / deploy (push) Failing after 25s
2026-02-08 23:28:35 +01:00
ext.jeremy.guillot@maxicoffee.domains
ec8a45a500 fix: test deploy images
All checks were successful
Build and Deploy / deploy (push) Successful in 54s
2026-02-08 23:11:17 +01:00
ext.jeremy.guillot@maxicoffee.domains
889646afda fix: test deploy images
All checks were successful
Build and Deploy / deploy (push) Successful in 1m36s
2026-02-08 23:02:02 +01:00
ext.jeremy.guillot@maxicoffee.domains
af84deadd2 feat: test success
All checks were successful
Build and Deploy / deploy (push) Successful in 1m0s
2026-02-08 22:53:56 +01:00
ext.jeremy.guillot@maxicoffee.domains
4d18c45af1 fix: test deploy
All checks were successful
Build and Deploy / deploy (push) Successful in 1m28s
2026-02-08 22:50:36 +01:00
ext.jeremy.guillot@maxicoffee.domains
8d261a9de3 feat: deploy
All checks were successful
Build and Deploy / deploy (push) Successful in 2m35s
2026-02-08 22:45:57 +01:00
ext.jeremy.guillot@maxicoffee.domains
8bebde2f58 feat: deploy
Some checks failed
Build and Deploy / deploy (push) Failing after 1s
2026-02-08 22:43:22 +01:00
ext.jeremy.guillot@maxicoffee.domains
5a3e68fa2a fix: assets
Some checks failed
Build and Deploy / deploy (push) Failing after 0s
2026-02-08 22:21:33 +01:00
ext.jeremy.guillot@maxicoffee.domains
c03cad6028 fix: Dockerfile DATABASE_URL
Some checks failed
Build and Deploy / deploy (push) Failing after 0s
2026-02-08 22:04:54 +01:00
ext.jeremy.guillot@maxicoffee.domains
03b0e5a34f fix: Dockerfile DATABASE_URL
Some checks failed
Build and Deploy / deploy (push) Failing after 1s
2026-02-08 22:04:00 +01:00
ext.jeremy.guillot@maxicoffee.domains
d8f8984192 fix: Dockerfile npm install
Some checks failed
Build and Deploy / deploy (push) Failing after 1s
2026-02-08 21:59:55 +01:00
ext.jeremy.guillot@maxicoffee.domains
58f68541f4 fix: composer.lock sync
Some checks failed
Build and Deploy / deploy (push) Failing after 1s
2026-02-08 21:56:38 +01:00
ext.jeremy.guillot@maxicoffee.domains
f472e250eb fix: composer.lock sync
Some checks failed
Build and Deploy / deploy (push) Failing after 0s
2026-02-08 21:54:59 +01:00
ext.jeremy.guillot@maxicoffee.domains
89b074113c fix: build
Some checks failed
Build and Deploy / deploy (push) Failing after 0s
2026-02-08 21:52:56 +01:00
ext.jeremy.guillot@maxicoffee.domains
134b4679ae fix: package-lock sync
Some checks failed
Build and Deploy / deploy (push) Failing after 0s
2026-02-08 21:47:30 +01:00
ext.jeremy.guillot@maxicoffee.domains
fb6a61d5b6 feat: deploy
Some checks failed
Build and Deploy / deploy (push) Failing after 21s
2026-02-08 21:35:13 +01:00
ext.jeremy.guillot@maxicoffee.domains
21a87a3eb3 feat: update readme 2026-02-08 18:17:44 +01:00
ext.jeremy.guillot@maxicoffee.domains
ffceda606f feat: commit before changing gitea 2026-02-08 17:58:01 +01:00
ext.jeremy.guillot@maxicoffee.domains
b05bd98f63 feat: affichage des cartes lors de l'analyse 2025-10-16 15:44:01 +02:00
ext.jeremy.guillot@maxicoffee.domains
9e7f7b4cfc fix: more patterns 2025-10-16 14:35:58 +02:00
ext.jeremy.guillot@maxicoffee.domains
50b33f53d7 fix: fix search 2025-10-15 16:31:58 +02:00
ext.jeremy.guillot@maxicoffee.domains
3170a7c60e feat: analyse import + all tests fixed 2025-10-15 16:14:15 +02:00
ext.jeremy.guillot@maxicoffee.domains
fbe9619224 fix: warnings navigateur 2025-08-01 15:22:54 +02:00
ext.jeremy.guillot@maxicoffee.domains
8d14676656 feat: amélioration de la gestion des messages dans le Makefile avec la séparation des commandes et des événements. Mise à jour des services pour intégrer un nouvel EventDispatcher et réorganisation des imports dans les fichiers concernés. Gestion des exceptions ajoutée dans le provider Mangadex pour une meilleure robustesse. 2025-08-01 15:14:12 +02:00
ext.jeremy.guillot@maxicoffee.domains
bec1572fcb feat: refonte de la gestion des événements de création de mangas en remplaçant le MessageBus par un EventDispatcher. Ajout d'un écouteur d'événements MangaCreated pour gérer la récupération des chapitres après la création d'un manga. Implémentation d'un EventDispatcher basé sur Symfony Messenger. 2025-07-31 16:11:16 +02:00
ext.jeremy.guillot@maxicoffee.domains
f1eb97f156 refactor: réorganisation des imports dans AddManga.vue pour une meilleure lisibilité et mise à jour de MangaCreatedListener pour utiliser MangaId lors de la création de chapitres. Suppression de l'appel à fetchMangaChapters après la création d'un manga. 2025-07-23 16:54:11 +02:00
ext.jeremy.guillot@maxicoffee.domains
f09f744a9b feat: ajout de la fonctionnalité de suppression de mangas, incluant une modale de confirmation pour l'utilisateur, la gestion des erreurs et l'intégration avec l'API pour supprimer les mangas et leurs chapitres associés. Mise à jour des composants Vue et ajout de tests pour valider cette nouvelle fonctionnalité. 2025-07-23 16:42:54 +02:00
ext.jeremy.guillot@maxicoffee.domains
7f9d583c94 feat: ajout de la gestion de l'expansion des volumes dans les composants MangaVolume et MangaVolumeList. Intégration de la synchronisation de l'état d'expansion avec les props, ainsi que des méthodes pour étendre ou réduire tous les volumes. Amélioration de l'interface utilisateur pour une navigation plus fluide entre les volumes. 2025-07-23 16:08:20 +02:00
ext.jeremy.guillot@maxicoffee.domains
330a0fac34 feat: refonte de la modale de gestion des chapitres avec un design Material Design, ajout de nouvelles fonctionnalités pour la séparation des volumes, et amélioration de l'interface utilisateur. Intégration de nouveaux composants pour une meilleure expérience utilisateur lors de la gestion des chapitres et des volumes. 2025-07-23 16:00:49 +02:00
ext.jeremy.guillot@maxicoffee.domains
be283833e9 feat: amélioration du service de téléchargement d'images, ajout de la gestion des types de contenu, création de fichiers temporaires pour le traitement des images, et détection des formats d'image. La sauvegarde des images est maintenant garantie avec l'extension JPG. Gestion des erreurs améliorée lors de la création et de la sauvegarde des ressources d'image. 2025-07-23 15:11:52 +02:00