feat: GetPage endpoint
This commit is contained in:
parent
55945adc53
commit
33f5a5568a
24
src/Domain/Reader/Application/Query/GetChapterPage.php
Normal file
24
src/Domain/Reader/Application/Query/GetChapterPage.php
Normal file
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Domain\Reader\Application\Query;
|
||||
|
||||
final readonly class GetChapterPage
|
||||
{
|
||||
public function __construct(
|
||||
private string $chapterId,
|
||||
private int $pageNumber
|
||||
) {
|
||||
}
|
||||
|
||||
public function getChapterId(): string
|
||||
{
|
||||
return $this->chapterId;
|
||||
}
|
||||
|
||||
public function getPageNumber(): int
|
||||
{
|
||||
return $this->pageNumber;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Domain\Reader\Application\QueryHandler;
|
||||
|
||||
use App\Domain\Reader\Application\Query\GetChapterPage;
|
||||
use App\Domain\Reader\Application\Response\ChapterPageResponse;
|
||||
use App\Domain\Reader\Domain\Contract\Repository\ChapterRepositoryInterface;
|
||||
use App\Domain\Reader\Domain\Exception\ChapterNotFoundException;
|
||||
use App\Domain\Reader\Domain\Exception\PageNotFoundException;
|
||||
use App\Domain\Reader\Domain\ValueObject\ChapterId;
|
||||
use App\Domain\Reader\Domain\ValueObject\PageNumber;
|
||||
|
||||
final readonly class GetChapterPageHandler
|
||||
{
|
||||
public function __construct(
|
||||
private ChapterRepositoryInterface $chapterRepository
|
||||
) {
|
||||
}
|
||||
|
||||
public function handle(GetChapterPage $query): ChapterPageResponse
|
||||
{
|
||||
$chapterId = new ChapterId($query->getChapterId());
|
||||
$pageNumber = new PageNumber($query->getPageNumber());
|
||||
|
||||
$totalPages = $this->chapterRepository->getTotalPagesForChapter($chapterId);
|
||||
|
||||
if ($totalPages === 0) {
|
||||
throw ChapterNotFoundException::forChapter($chapterId);
|
||||
}
|
||||
|
||||
if ($pageNumber->getValue() > $totalPages) {
|
||||
throw PageNotFoundException::forPage($chapterId, $pageNumber);
|
||||
}
|
||||
|
||||
$page = $this->chapterRepository->getPageContent($chapterId, $pageNumber);
|
||||
|
||||
return new ChapterPageResponse(
|
||||
$page->getId(),
|
||||
$page->getPageNumber()->getValue(),
|
||||
$page->getBase64Content(),
|
||||
$page->getMimeType(),
|
||||
$page->getDimensions()
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Domain\Reader\Application\Response;
|
||||
|
||||
final readonly class ChapterPageResponse
|
||||
{
|
||||
public function __construct(
|
||||
private string $id,
|
||||
private int $pageNumber,
|
||||
private string $base64Content,
|
||||
private string $mimeType,
|
||||
private array $dimensions
|
||||
) {
|
||||
}
|
||||
|
||||
public function getId(): string
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
public function getPageNumber(): int
|
||||
{
|
||||
return $this->pageNumber;
|
||||
}
|
||||
|
||||
public function getBase64Content(): string
|
||||
{
|
||||
return $this->base64Content;
|
||||
}
|
||||
|
||||
public function getMimeType(): string
|
||||
{
|
||||
return $this->mimeType;
|
||||
}
|
||||
|
||||
public function getDimensions(): array
|
||||
{
|
||||
return $this->dimensions;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user