Skip to content

Commit dd97ce9

Browse files
committed
extract request parsing into DTOs and factories
1 parent b1c66ad commit dd97ce9

24 files changed

Lines changed: 569 additions & 254 deletions

src/Command/UserCreateCommand.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
namespace App\Command;
66

7-
use App\Security\UserPasswordHasher;
7+
use App\Security\UploadAccessChecker;
88
use App\Service\ElementManager;
99
use App\Style\EmberNexusStyle;
1010
use App\Type\NodeElement;
@@ -28,9 +28,9 @@ class UserCreateCommand extends Command
2828
private OutputStyle $io;
2929

3030
public function __construct(
31-
private ElementManager $elementManager,
32-
private CypherEntityManager $cypherEntityManager,
33-
private UserPasswordHasher $userPasswordHasher,
31+
private ElementManager $elementManager,
32+
private CypherEntityManager $cypherEntityManager,
33+
private UploadAccessChecker $userPasswordHasher,
3434
private EmberNexusConfiguration $emberNexusConfiguration,
3535
) {
3636
parent::__construct();

src/Controller/Element/DeleteElementController.php

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,7 @@ public function deleteElement(string $id): Response
4646
throw $this->client404NotFoundExceptionFactory->createFromTemplate();
4747
}
4848

49-
$element = $this->elementManager->getElement($elementId);
50-
if (null === $element) {
51-
throw $this->client404NotFoundExceptionFactory->createFromTemplate();
52-
}
49+
$element = $this->elementManager->getElementOrFail($elementId);
5350
$this->elementManager->delete($element);
5451
$this->elementManager->flush();
5552

src/Controller/Element/PatchElementController.php

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,7 @@ public function patchElement(string $id, Request $request): Response
4949
throw $this->client404NotFoundExceptionFactory->createFromTemplate();
5050
}
5151

52-
$element = $this->elementManager->getElement($elementId);
53-
if (null === $element) {
54-
throw $this->client404NotFoundExceptionFactory->createFromTemplate();
55-
}
52+
$element = $this->elementManager->getElementOrFail($elementId);
5653

5754
/**
5855
* @var array<string, mixed> $rawData

src/Controller/Element/PostIndexController.php

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,7 @@ public function postIndex(Request $request): Response
7979
$startId = null;
8080
if (array_key_exists('start', $body)) {
8181
$startId = UuidV4::fromString($body['start']);
82-
$startElement = $this->elementManager->getElement($startId);
83-
if (null === $startElement) {
84-
throw $this->client404NotFoundExceptionFactory->createFromTemplate();
85-
}
82+
$startElement = $this->elementManager->getElementOrFail($startId);
8683
if (!$this->accessChecker->hasAccessToElement($userId, $startId, AccessType::CREATE)) {
8784
throw $this->client404NotFoundExceptionFactory->createFromTemplate();
8885
}
@@ -94,10 +91,7 @@ public function postIndex(Request $request): Response
9491
$endId = null;
9592
if (array_key_exists('end', $body)) {
9693
$endId = UuidV4::fromString($body['end']);
97-
$endElement = $this->elementManager->getElement($endId);
98-
if (null === $endElement) {
99-
throw $this->client404NotFoundExceptionFactory->createFromTemplate();
100-
}
94+
$endElement = $this->elementManager->getElementOrFail($endId);
10195
if (!$this->accessChecker->hasAccessToElement($userId, $endId, AccessType::READ)) {
10296
throw $this->client404NotFoundExceptionFactory->createFromTemplate();
10397
}

src/Controller/Element/PutElementController.php

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,7 @@ public function putElement(string $id, Request $request): Response
5151
throw $this->client404NotFoundExceptionFactory->createFromTemplate();
5252
}
5353

54-
$element = $this->elementManager->getElement($elementId);
55-
if (null === $element) {
56-
throw $this->client404NotFoundExceptionFactory->createFromTemplate();
57-
}
54+
$element = $this->elementManager->getElementOrFail($elementId);
5855

5956
/**
6057
* @var array<string, mixed> $rawData

src/Controller/File/DeleteElementFileController.php

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,7 @@ public function deleteElementFile(string $id): Response
5757
throw $this->client404NotFoundExceptionFactory->createFromTemplate();
5858
}
5959

60-
$element = $this->elementManager->getElement($elementId);
61-
if (null === $element) {
62-
throw $this->client404NotFoundExceptionFactory->createFromTemplate();
63-
}
60+
$element = $this->elementManager->getElementOrFail($elementId);
6461

6562
$extension = $this->elementService->getFileNameExtension($element);
6663
$objectConfig = [

src/Controller/File/GetElementFileController.php

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,7 @@ public function getElementFile(string $id): BinaryStreamResponse
5050
throw $this->client404NotFoundExceptionFactory->createFromTemplate();
5151
}
5252

53-
$element = $this->elementManager->getElement($elementId);
54-
if (null === $element) {
55-
throw $this->client404NotFoundExceptionFactory->createFromTemplate();
56-
}
53+
$element = $this->elementManager->getElementOrFail($elementId);
5754

5855
$fileName = $this->elementService->getFileName($element);
5956
$fileNameFallback = $this->fileService->getAsciiSafeFileName($fileName);

src/Controller/File/PostElementFileController.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44

55
namespace App\Controller\File;
66

7+
use App\Factory\Exception\Client409ConflictExceptionFactory;
78
use App\Helper\Regex;
9+
use App\Service\ElementManager;
810
use App\Service\UploadCreationService;
911
use Ramsey\Uuid\Rfc4122\UuidV4;
1012
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
@@ -19,6 +21,8 @@ class PostElementFileController extends AbstractController
1921
{
2022
public function __construct(
2123
private UploadCreationService $uploadCreationService,
24+
private ElementManager $elementManager,
25+
private Client409ConflictExceptionFactory $client409ConflictExceptionFactory,
2226
) {
2327
}
2428

@@ -34,6 +38,12 @@ public function postElementFile(string $id, Request $request): Response
3438
{
3539
$elementId = UuidV4::fromString($id);
3640

41+
$element = $this->elementManager->getElementOrFail($elementId);
42+
$properties = $element->getProperties();
43+
if (array_key_exists('file', $properties)) {
44+
throw $this->client409ConflictExceptionFactory->createFromDetail(sprintf("Element with id '%s' already has an associated file; can not create new file. Delete existing file first or replace it with PUT.", $element->getId()?->toString() ?? 'missing element id'));
45+
}
46+
3747
return $this->uploadCreationService->handleUploadCreationFromRequest($elementId, $request);
3848
}
3949
}

src/Controller/Upload/DeleteUploadController.php

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,7 @@ public function deleteUpload(string $id): NoContentResponse
4545
$uploadId = UuidV4::fromString($id);
4646
$userId = $this->authProvider->getUserId();
4747

48-
$uploadElement = $this->elementManager->getElement($uploadId);
49-
if (null === $uploadElement) {
50-
throw $this->client404NotFoundExceptionFactory->createFromTemplate();
51-
}
48+
$uploadElement = $this->elementManager->getElementOrFail($uploadId);
5249

5350
try {
5451
$uploadElement = UploadElement::createFromElement($uploadElement);

src/Controller/Upload/HeadUploadController.php

Lines changed: 4 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
namespace App\Controller\Upload;
66

77
use App\Factory\Exception\Client404NotFoundExceptionFactory;
8+
use App\Factory\Response\NoContentResponseFactory;
89
use App\Helper\Regex;
910
use App\Response\NoContentResponse;
1011
use App\Security\AuthProvider;
@@ -21,8 +22,8 @@ class HeadUploadController extends AbstractController
2122
{
2223
public function __construct(
2324
private AuthProvider $authProvider,
24-
private EmberNexusConfiguration $emberNexusConfiguration,
2525
private ElementManager $elementManager,
26+
private NoContentResponseFactory $noContentResponseFactory,
2627
private Client404NotFoundExceptionFactory $client404NotFoundExceptionFactory,
2728
) {
2829
}
@@ -40,10 +41,7 @@ public function headUpload(string $id): Response
4041
$elementId = UuidV4::fromString($id);
4142
$userId = $this->authProvider->getUserId();
4243

43-
$element = $this->elementManager->getElement($elementId);
44-
if (null === $element) {
45-
throw $this->client404NotFoundExceptionFactory->createFromTemplate();
46-
}
44+
$element = $this->elementManager->getElementOrFail($elementId);
4745

4846
try {
4947
$uploadElement = UploadElement::createFromElement($element);
@@ -59,21 +57,6 @@ public function headUpload(string $id): Response
5957
throw $this->client404NotFoundExceptionFactory->createFromTemplate();
6058
}
6159

62-
header(sprintf('Upload-Complete: ?%s', $uploadElement->isUploadComplete() ? '1' : '0'));
63-
header(sprintf('Upload-Offset: %d', $uploadElement->getUploadOffset()));
64-
$uploadLength = $uploadElement->getUploadLength();
65-
if (null !== $uploadLength) {
66-
header(sprintf('Upload-Length: %d', $uploadLength));
67-
}
68-
header(sprintf(
69-
'Upload-Limit: max-age=%d, max-size=%d, min-append-size=%d, max-append-size=%d',
70-
$this->emberNexusConfiguration->getFileUploadExpiresInSecondsAfterFirstRequest(),
71-
$this->emberNexusConfiguration->getFileMaxFileSizeInBytes(),
72-
$this->emberNexusConfiguration->getFileUploadMinChunkSizeInBytes(),
73-
$this->emberNexusConfiguration->getFileUploadMaxChunkSizeInBytes(),
74-
));
75-
header('Cache-Control: no-store');
76-
77-
return new NoContentResponse();
60+
return $this->noContentResponseFactory->createNoContentResponseWithResumableUploadHeaders($uploadElement);
7861
}
7962
}

0 commit comments

Comments
 (0)