Commit Graph

219 Commits

Author SHA1 Message Date
ext.jeremy.guillot@maxicoffee.domains
e78a6230b5 fix: deploy
All checks were successful
Deploy / deploy (push) Successful in 3m37s
2026-03-11 19:22:56 +01:00
ext.jeremy.guillot@maxicoffee.domains
9d61e4231a fix: deploy
All checks were successful
Deploy / deploy (push) Successful in 3m15s
2026-03-11 19:16:57 +01:00
ext.jeremy.guillot@maxicoffee.domains
027f795bc0 fix: test deploy
All checks were successful
Deploy / deploy (push) Successful in 3m34s
2026-03-11 19:06:41 +01:00
ext.jeremy.guillot@maxicoffee.domains
19f1633c7a fix: deploy
All checks were successful
Deploy / deploy (push) Successful in 3m58s
2026-03-10 23:28:57 +01:00
ext.jeremy.guillot@maxicoffee.domains
751fb1e74b fix: deploy
Some checks failed
Deploy / deploy (push) Failing after 1m52s
2026-03-10 23:25:03 +01:00
ext.jeremy.guillot@maxicoffee.domains
c60301d1ca fix: deploy
Some checks failed
Deploy / deploy (push) Failing after 1m10s
2026-03-10 23:16:32 +01:00
ext.jeremy.guillot@maxicoffee.domains
944994b7d7 fix: deploy
Some checks failed
Deploy / deploy (push) Failing after 56s
2026-03-10 23:14:16 +01:00
ext.jeremy.guillot@maxicoffee.domains
08e005a0d3 fix: deploy
Some checks failed
Deploy / deploy (push) Failing after 2m19s
2026-03-10 23:10:15 +01:00
ext.jeremy.guillot@maxicoffee.domains
566b62450e fix: deploy
Some checks failed
Deploy / deploy (push) Failing after 3m11s
2026-03-10 23:05:11 +01:00
ext.jeremy.guillot@maxicoffee.domains
16f87d5f06 fix: deploy
Some checks failed
Deploy / deploy (push) Failing after 3m10s
2026-03-10 22:59:39 +01:00
ext.jeremy.guillot@maxicoffee.domains
78971a7e2b fix: deploy
Some checks failed
Deploy / deploy (push) Failing after 38s
2026-03-10 22:56:15 +01:00
ext.jeremy.guillot@maxicoffee.domains
b1feb6a83f fix: deploy
Some checks failed
Deploy / deploy (push) Failing after 42s
2026-03-10 22:50:45 +01:00
ext.jeremy.guillot@maxicoffee.domains
8b41626894 fix: deploy
Some checks failed
Deploy / deploy (push) Failing after 11s
2026-03-10 22:47:23 +01:00
ext.jeremy.guillot@maxicoffee.domains
4e7a277d49 fix: deploy
Some checks failed
Deploy / deploy (push) Failing after 19s
2026-03-10 22:43:40 +01:00
ext.jeremy.guillot@maxicoffee.domains
01428cbdeb fix: deploy
Some checks failed
Deploy / deploy (push) Failing after 33s
2026-03-10 22:41:38 +01:00
ext.jeremy.guillot@maxicoffee.domains
5f5271e1b5 fix: deploy
Some checks failed
Deploy / deploy (push) Failing after 11s
2026-03-10 22:38:09 +01:00
ext.jeremy.guillot@maxicoffee.domains
939f6da0c4 fix: test deploy
Some checks failed
Deploy / deploy (push) Failing after 16s
2026-03-10 22:33:26 +01:00
ext.jeremy.guillot@maxicoffee.domains
0756460fbc fix: git token
Some checks failed
Deploy / deploy (push) Failing after 12s
2026-03-10 22:08:35 +01:00
ext.jeremy.guillot@maxicoffee.domains
3941cb4b8f feat: deployer
Some checks failed
Deploy / deploy (push) Failing after 21s
2026-03-10 21:48:18 +01:00
ext.jeremy.guillot@maxicoffee.domains
3507349167 fix: symfony css selector in prod
All checks were successful
Build and Deploy / deploy (push) Successful in 1m25s
2026-03-09 23:10:32 +01:00
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