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>
53 lines
2.1 KiB
YAML
53 lines
2.1 KiB
YAML
framework:
|
|
messenger:
|
|
default_bus: command.bus
|
|
# Transports
|
|
transports:
|
|
commands:
|
|
dsn: '%env(MESSENGER_TRANSPORT_DSN)%'
|
|
options:
|
|
queue_name: commands
|
|
events:
|
|
dsn: '%env(MESSENGER_TRANSPORT_DSN)%'
|
|
options:
|
|
queue_name: events
|
|
|
|
# Buses configuration
|
|
buses:
|
|
command.bus:
|
|
middleware:
|
|
- validation
|
|
- doctrine_transaction
|
|
event.bus:
|
|
default_middleware: allow_no_handlers
|
|
|
|
# Message routing
|
|
routing:
|
|
# Commands
|
|
'App\Domain\Scraping\Application\Command\ScrapeChapter': commands
|
|
'App\Domain\Manga\Application\Command\FetchMangaChapters': commands
|
|
'App\Domain\Manga\Application\Command\RefreshMangaChapters': commands
|
|
|
|
# Events spécifiques (pour compatibilité, peuvent être supprimés si tous implémentent AsyncDomainEvent)
|
|
'App\Domain\Scraping\Domain\Event\ChapterScrapingStarted': events
|
|
'App\Domain\Scraping\Domain\Event\ChapterScrapingCompleted': events
|
|
'App\Domain\Scraping\Domain\Event\ChapterScrapingFailed': events
|
|
'App\Domain\Manga\Domain\Event\ChapterReadyForScraping': events
|
|
'App\Domain\Manga\Domain\Event\MangaCreated': events
|
|
'App\Domain\Shared\Domain\Event\ChapterImported': events
|
|
'App\Domain\Shared\Domain\Event\VolumeImported': events
|
|
'App\Domain\Shared\Domain\Event\ChapterScraped': events
|
|
|
|
# Legacy messages (à garder si nécessaire)
|
|
'App\Message\DownloadChapter': commands
|
|
'App\Message\RefreshMetadata': commands
|
|
'App\Message\RefreshAndDownloadChapters': commands
|
|
|
|
# when@test:
|
|
# framework:
|
|
# messenger:
|
|
# transports:
|
|
# # replace with your transport name here (e.g., my_transport: 'in-memory://')
|
|
# # For more Messenger testing tools, see https://github.com/zenstruck/messenger-test
|
|
# async: 'in-memory://'
|