refactor(scraping): DDD refactoring — stockage images individuelles #3
Reference in New Issue
Block a user
Delete Branch "feat/scraping-ddd-image-storage"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
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é.
Changements principaux
Domaine Scraping
CbzPath, CbzGenerationException
(stockage dans {MANGA_DATA_PATH}/pages/{chapterId}/)
Événement partagé
avec jobId, chapterId, pagesDirectory, pageCount
Domaine Manga
pour mettre à jour Chapter.pagesDirectory via le Repository Manga
Domaine Reader
pagesDirectory en priorité, fallback cbzPath (backward compat)
Architecture
les couches Application (correction violations pré-existantes
ChapterImported/VolumeImported + nouvelle ChapterScraped)
Tests
Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com
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é. ## Changements principaux ### Domaine Scraping - 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 ### Événement partagé - ChapterScraped déplacé dans Domain/Shared/Domain/Event/ avec jobId, chapterId, pagesDirectory, pageCount - Routing Messenger ajouté ### Domaine Manga - Ajout : ChapterScrapedEventListener + ChapterScrapedMessageHandler pour mettre à jour Chapter.pagesDirectory via le Repository Manga ### Domaine Reader - 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 ### Architecture - phparkitect.php : App\Domain\Shared\Domain\Event autorisé dans les couches Application (correction violations pré-existantes ChapterImported/VolumeImported + nouvelle ChapterScraped) ## Tests - 218/218 tests passent (+3 nouveaux) - InMemoryImageStorage créé pour les tests unitaires Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>b7f4ee9082toc311cfe80c