diff --git a/backend/app/Controllers/ElementController.php b/backend/app/Controllers/ElementController.php index b6aae90..5fdc162 100644 --- a/backend/app/Controllers/ElementController.php +++ b/backend/app/Controllers/ElementController.php @@ -6,10 +6,6 @@ use App\Element\Element; use App\Element\UseCases\GetElement\GetElement; use App\Element\UseCases\GetElement\GetElementRequest; use App\Element\UseCases\UpdateElement\UpdateElement; -use App\Element\UseCases\UpdateElement\UpdateElementIconImage; -use App\Element\UseCases\UpdateElement\UpdateElementIconImageRequest; -use App\Element\UseCases\UpdateElement\UpdateElementPdf; -use App\Element\UseCases\UpdateElement\UpdateElementPdfRequest; use App\Element\UseCases\UpdateElement\UpdateElementRequest; use App\Exceptions\BadRequestException; use App\Exceptions\NotFoundException; @@ -23,8 +19,6 @@ class ElementController public function __construct( private GetElement $getElement, private UpdateElement $updateElement, - private UpdateElementIconImage $updateElementIconImage, - private UpdateElementPdf $updateElementPdf, private FileUploader $fileUploader, ) { } @@ -63,6 +57,9 @@ class ElementController public function update(?int $id, Request $request): JsonResponse { + $iconImage = $this->uploadedFileInput($request, 'iconImage'); + $pdf = $this->uploadedFileInput($request, 'pdf'); + try { $element = $this->updateElement->execute( new UpdateElementRequest( @@ -76,64 +73,14 @@ class ElementController richText: $this->stringInput($request, 'richText'), pdfPath: $this->stringInput($request, 'pdfPath'), youtubeUrl: $this->stringInput($request, 'youtubeUrl'), - ) - ); - } catch (BadRequestException $exception) { - return new JsonResponse([ - 'error' => $exception->getMessage(), - ], 400); - } catch (NotFoundException $exception) { - return new JsonResponse([ - 'error' => $exception->getMessage(), - ], 404); - } - - return new JsonResponse([ - 'element' => $this->buildElementPayload($element), - ], 200); - } - - public function uploadPdf(?int $id, Request $request): JsonResponse - { - $pdf = $this->uploadedFileInput($request, 'pdf'); - - try { - $element = $this->updateElementPdf->execute( - new UpdateElementPdfRequest( - id: $id, - pdfContents: $pdf['contents'], - pdfOriginalName: $pdf['originalName'], - pdfMimeType: $pdf['mimeType'], - pdfSizeBytes: $pdf['sizeBytes'], - ) - ); - } catch (BadRequestException $exception) { - return new JsonResponse([ - 'error' => $exception->getMessage(), - ], 400); - } catch (NotFoundException $exception) { - return new JsonResponse([ - 'error' => $exception->getMessage(), - ], 404); - } - - return new JsonResponse([ - 'element' => $this->buildElementPayload($element), - ], 200); - } - - public function uploadIconImage(?int $id, Request $request): JsonResponse - { - $iconImage = $this->uploadedFileInput($request, 'iconImage'); - - try { - $element = $this->updateElementIconImage->execute( - new UpdateElementIconImageRequest( - id: $id, iconImageContents: $iconImage['contents'], iconImageOriginalName: $iconImage['originalName'], iconImageMimeType: $iconImage['mimeType'], iconImageSizeBytes: $iconImage['sizeBytes'], + pdfContents: $pdf['contents'], + pdfOriginalName: $pdf['originalName'], + pdfMimeType: $pdf['mimeType'], + pdfSizeBytes: $pdf['sizeBytes'], ) ); } catch (BadRequestException $exception) { diff --git a/backend/app/Element/UseCases/UpdateElement/UpdateElement.php b/backend/app/Element/UseCases/UpdateElement/UpdateElement.php index 9f8811a..b07e596 100644 --- a/backend/app/Element/UseCases/UpdateElement/UpdateElement.php +++ b/backend/app/Element/UseCases/UpdateElement/UpdateElement.php @@ -16,6 +16,8 @@ class UpdateElement private UpdateRichText $updateRichText, private UpdatePdfPath $updatePdfPath, private UpdateYoutubeUrl $updateYoutubeUrl, + private UpdateElementIconImage $updateElementIconImage, + private UpdateElementPdf $updateElementPdf, private ElementRepository $elementRepository, ) { } @@ -35,7 +37,9 @@ class UpdateElement && $request->iconImageUrl === null && $request->richText === null && $request->pdfPath === null - && $request->youtubeUrl === null; + && $request->youtubeUrl === null + && $request->iconImageContents === null + && $request->pdfContents === null; if ($hasNoFields) { throw new BadRequestException('nothing to update'); } @@ -78,6 +82,28 @@ class UpdateElement youtubeUrl: $request->youtubeUrl, )); } + if ($request->iconImageContents !== null) { + $this->updateElementIconImage->execute( + new UpdateElementIconImageRequest( + id: $request->id, + iconImageContents: $request->iconImageContents, + iconImageOriginalName: $request->iconImageOriginalName, + iconImageMimeType: $request->iconImageMimeType, + iconImageSizeBytes: $request->iconImageSizeBytes, + ) + ); + } + if ($request->pdfContents !== null) { + $this->updateElementPdf->execute( + new UpdateElementPdfRequest( + id: $request->id, + pdfContents: $request->pdfContents, + pdfOriginalName: $request->pdfOriginalName, + pdfMimeType: $request->pdfMimeType, + pdfSizeBytes: $request->pdfSizeBytes, + ) + ); + } $element = $this->elementRepository->find($request->id); if ($element === null) { diff --git a/backend/app/Element/UseCases/UpdateElement/UpdateElementRequest.php b/backend/app/Element/UseCases/UpdateElement/UpdateElementRequest.php index 0b5e766..aa1aa06 100644 --- a/backend/app/Element/UseCases/UpdateElement/UpdateElementRequest.php +++ b/backend/app/Element/UseCases/UpdateElement/UpdateElementRequest.php @@ -12,6 +12,14 @@ class UpdateElementRequest public ?string $richText, public ?string $pdfPath, public ?string $youtubeUrl, + public ?string $iconImageContents, + public ?string $iconImageOriginalName, + public ?string $iconImageMimeType, + public ?int $iconImageSizeBytes, + public ?string $pdfContents, + public ?string $pdfOriginalName, + public ?string $pdfMimeType, + public ?int $pdfSizeBytes, ) { } } diff --git a/backend/routes/api.php b/backend/routes/api.php index 1ad6827..b3a4a7d 100644 --- a/backend/routes/api.php +++ b/backend/routes/api.php @@ -12,15 +12,5 @@ Route::get('/me', [AuthController::class, 'me']) ->middleware(AuthMiddleware::class); Route::get('/sets', [SetController::class, 'index']); Route::get('/elements/{id}', [ElementController::class, 'show']); -Route::patch('/elements/{id}', [ElementController::class, 'update']) - ->middleware(AuthMiddleware::class); -Route::post( - '/elements/{id}/icon-image', - [ElementController::class, 'uploadIconImage'], -) - ->middleware(AuthMiddleware::class); -Route::post( - '/elements/{id}/pdf', - [ElementController::class, 'uploadPdf'], -) +Route::post('/elements/{id}', [ElementController::class, 'update']) ->middleware(AuthMiddleware::class);