route element file uploads
Add short and long PDF paths to elements, keep pdfPath as a short PDF compatibility alias, and route generic file uploads by fileType.
This commit is contained in:
parent
0d5783ba9c
commit
9bbabc7fa6
28 changed files with 686 additions and 214 deletions
|
|
@ -9,15 +9,23 @@ use App\Exceptions\NotFoundException;
|
|||
|
||||
class UpdateElement
|
||||
{
|
||||
private const FILE_TYPE_ICON_IMAGE = 'iconImage';
|
||||
|
||||
private const FILE_TYPE_SHORT_PDF = 'shortPdf';
|
||||
|
||||
private const FILE_TYPE_LONG_PDF = 'longPdf';
|
||||
|
||||
public function __construct(
|
||||
private UpdateTitle $updateTitle,
|
||||
private UpdateDescription $updateDescription,
|
||||
private UpdateIconImageUrl $updateIconImageUrl,
|
||||
private UpdateRichText $updateRichText,
|
||||
private UpdatePdfPath $updatePdfPath,
|
||||
private UpdateShortPdfPath $updateShortPdfPath,
|
||||
private UpdateLongPdfPath $updateLongPdfPath,
|
||||
private UpdateYoutubeUrl $updateYoutubeUrl,
|
||||
private UpdateIconImage $updateIconImage,
|
||||
private UpdatePdf $updatePdf,
|
||||
private UpdateShortPdf $updateShortPdf,
|
||||
private UpdateLongPdf $updateLongPdf,
|
||||
private ElementRepository $elementRepository,
|
||||
) {
|
||||
}
|
||||
|
|
@ -36,10 +44,15 @@ class UpdateElement
|
|||
&& $request->description === null
|
||||
&& $request->iconImageUrl === null
|
||||
&& $request->richText === null
|
||||
&& $request->shortPdfPath === null
|
||||
&& $request->longPdfPath === null
|
||||
&& $request->pdfPath === null
|
||||
&& $request->youtubeUrl === null
|
||||
&& $request->iconImageContents === null
|
||||
&& $request->pdfContents === null;
|
||||
&& $request->fileType === null
|
||||
&& $request->fileContents === null
|
||||
&& $request->fileOriginalName === null
|
||||
&& $request->fileMimeType === null
|
||||
&& $request->fileSizeBytes === null;
|
||||
if ($hasNoFields) {
|
||||
throw new BadRequestException('nothing to update');
|
||||
}
|
||||
|
|
@ -70,10 +83,21 @@ class UpdateElement
|
|||
richText: $request->richText,
|
||||
));
|
||||
}
|
||||
if ($request->pdfPath !== null) {
|
||||
$this->updatePdfPath->execute(new UpdatePdfPathRequest(
|
||||
if ($request->shortPdfPath !== null) {
|
||||
$this->updateShortPdfPath->execute(new UpdateShortPdfPathRequest(
|
||||
id: $request->id,
|
||||
pdfPath: $request->pdfPath,
|
||||
shortPdfPath: $request->shortPdfPath,
|
||||
));
|
||||
} elseif ($request->pdfPath !== null) {
|
||||
$this->updateShortPdfPath->execute(new UpdateShortPdfPathRequest(
|
||||
id: $request->id,
|
||||
shortPdfPath: $request->pdfPath,
|
||||
));
|
||||
}
|
||||
if ($request->longPdfPath !== null) {
|
||||
$this->updateLongPdfPath->execute(new UpdateLongPdfPathRequest(
|
||||
id: $request->id,
|
||||
longPdfPath: $request->longPdfPath,
|
||||
));
|
||||
}
|
||||
if ($request->youtubeUrl !== null) {
|
||||
|
|
@ -82,27 +106,8 @@ class UpdateElement
|
|||
youtubeUrl: $request->youtubeUrl,
|
||||
));
|
||||
}
|
||||
if ($request->iconImageContents !== null) {
|
||||
$this->updateIconImage->execute(
|
||||
new UpdateIconImageRequest(
|
||||
id: $request->id,
|
||||
iconImageContents: $request->iconImageContents,
|
||||
iconImageOriginalName: $request->iconImageOriginalName,
|
||||
iconImageMimeType: $request->iconImageMimeType,
|
||||
iconImageSizeBytes: $request->iconImageSizeBytes,
|
||||
)
|
||||
);
|
||||
}
|
||||
if ($request->pdfContents !== null) {
|
||||
$this->updatePdf->execute(
|
||||
new UpdatePdfRequest(
|
||||
id: $request->id,
|
||||
pdfContents: $request->pdfContents,
|
||||
pdfOriginalName: $request->pdfOriginalName,
|
||||
pdfMimeType: $request->pdfMimeType,
|
||||
pdfSizeBytes: $request->pdfSizeBytes,
|
||||
)
|
||||
);
|
||||
if ($this->hasFileInput($request)) {
|
||||
$this->updateFile($request);
|
||||
}
|
||||
|
||||
$element = $this->elementRepository->find($request->id);
|
||||
|
|
@ -112,4 +117,68 @@ class UpdateElement
|
|||
|
||||
return $element;
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws BadRequestException
|
||||
* @throws NotFoundException
|
||||
*/
|
||||
private function updateFile(UpdateElementRequest $request): void
|
||||
{
|
||||
if ($request->fileType === null) {
|
||||
throw new BadRequestException('fileType is required');
|
||||
}
|
||||
|
||||
if ($request->fileType === self::FILE_TYPE_ICON_IMAGE) {
|
||||
$this->updateIconImage->execute(
|
||||
new UpdateIconImageRequest(
|
||||
id: $request->id,
|
||||
fileContents: $request->fileContents,
|
||||
fileOriginalName: $request->fileOriginalName,
|
||||
fileMimeType: $request->fileMimeType,
|
||||
fileSizeBytes: $request->fileSizeBytes,
|
||||
)
|
||||
);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if ($request->fileType === self::FILE_TYPE_SHORT_PDF) {
|
||||
$this->updateShortPdf->execute(
|
||||
new UpdateShortPdfRequest(
|
||||
id: $request->id,
|
||||
fileContents: $request->fileContents,
|
||||
fileOriginalName: $request->fileOriginalName,
|
||||
fileMimeType: $request->fileMimeType,
|
||||
fileSizeBytes: $request->fileSizeBytes,
|
||||
)
|
||||
);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if ($request->fileType === self::FILE_TYPE_LONG_PDF) {
|
||||
$this->updateLongPdf->execute(
|
||||
new UpdateLongPdfRequest(
|
||||
id: $request->id,
|
||||
fileContents: $request->fileContents,
|
||||
fileOriginalName: $request->fileOriginalName,
|
||||
fileMimeType: $request->fileMimeType,
|
||||
fileSizeBytes: $request->fileSizeBytes,
|
||||
)
|
||||
);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
throw new BadRequestException('fileType is invalid');
|
||||
}
|
||||
|
||||
private function hasFileInput(UpdateElementRequest $request): bool
|
||||
{
|
||||
return $request->fileType !== null
|
||||
|| $request->fileContents !== null
|
||||
|| $request->fileOriginalName !== null
|
||||
|| $request->fileMimeType !== null
|
||||
|| $request->fileSizeBytes !== null;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue