refactor: Use StoredObjectManager.

This commit is contained in:
Pol Dellaiera
2022-03-08 15:48:52 +01:00
parent 62af980ea5
commit 35d723e5fb
2 changed files with 113 additions and 163 deletions

View File

@@ -11,12 +11,12 @@ declare(strict_types=1);
namespace Chill\WopiBundle\Service\Wopi;
use ChampsLibres\AsyncUploaderBundle\TempUrl\TempUrlGeneratorInterface;
use ChampsLibres\WopiLib\Contract\Entity\Document;
use ChampsLibres\WopiLib\Contract\Service\DocumentLockManagerInterface;
use ChampsLibres\WopiLib\Contract\Service\DocumentManagerInterface;
use Chill\DocStoreBundle\Entity\StoredObject;
use Chill\DocStoreBundle\Repository\StoredObjectRepository;
use Chill\DocStoreBundle\Service\StoredObjectManagerInterface;
use DateTimeInterface;
use Doctrine\ORM\EntityManagerInterface;
use Error;
@@ -28,8 +28,6 @@ use Symfony\Bridge\PsrHttpMessage\HttpMessageFactoryInterface;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Mime\MimeTypes;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Symfony\Contracts\HttpClient\HttpClientInterface;
use Throwable;
use function strlen;
@@ -39,33 +37,29 @@ final class ChillDocumentManager implements DocumentManagerInterface
private EntityManagerInterface $entityManager;
private HttpClientInterface $httpClient;
private Psr17Interface $psr17;
private RequestInterface $request;
private StoredObjectRepository $storedObjectRepository;
private TempUrlGeneratorInterface $tempUrlGenerator;
private StoredObjectManagerInterface $storedObjectManager;
public function __construct(
DocumentLockManagerInterface $documentLockManager,
EntityManagerInterface $entityManager,
HttpClientInterface $httpClient,
Psr17Interface $psr17,
StoredObjectRepository $storedObjectRepository,
TempUrlGeneratorInterface $tempUrlGenerator,
HttpMessageFactoryInterface $httpMessageFactory,
RequestStack $requestStack
Psr17Interface $psr17,
RequestStack $requestStack,
StoredObjectManagerInterface $storedObjectManager,
StoredObjectRepository $storedObjectRepository
) {
$this->documentLockManager = $documentLockManager;
$this->entityManager = $entityManager;
$this->psr17 = $psr17;
$this->storedObjectRepository = $storedObjectRepository;
$this->documentLockManager = $documentLockManager;
$this->tempUrlGenerator = $tempUrlGenerator;
$this->httpClient = $httpClient;
$this->request = $httpMessageFactory->createRequest($requestStack->getCurrentRequest());
$this->storedObjectManager = $storedObjectManager;
$this->storedObjectRepository = $storedObjectRepository;
}
public function create(array $data): Document
@@ -197,18 +191,7 @@ final class ChillDocumentManager implements DocumentManagerInterface
public function remove(Document $document): void
{
$entityIsDeleted = false;
try {
$this->entityManager->remove($document);
$entityIsDeleted = true;
} catch (Throwable $e) {
$entityIsDeleted = false;
}
if (true === $entityIsDeleted) {
$this->deleteContent($document);
}
// TODO: To implement when we have a clearer view and API.
}
public function write(Document $document, array $properties = []): void
@@ -216,42 +199,13 @@ final class ChillDocumentManager implements DocumentManagerInterface
$this->setContent($document, $properties['content']);
}
private function deleteContent(StoredObject $storedObject): void
{
/** @var StdClass $object */
$object = $this->tempUrlGenerator->generate('DELETE', $storedObject->getFilename());
$response = $this->httpClient->request('DELETE', $object->url);
if (200 !== $response->getStatusCode()) {
throw new Error('Unable to delete stored object.');
}
}
private function getContent(StoredObject $storedObject): string
{
/** @var StdClass $object */
$object = $this->tempUrlGenerator->generate('GET', $storedObject->getFilename());
$response = $this->httpClient->request('GET', $object->url);
if (200 !== $response->getStatusCode()) {
throw new Error('Unable to retrieve stored object.');
}
return $response->getContent();
return $this->storedObjectManager->read($storedObject);
}
private function setContent(StoredObject $storedObject, string $content): void
{
// TODO: Add strict typing in champs-libres/async-uploader-bundle
/** @var StdClass $object */
$object = $this->tempUrlGenerator->generate('PUT', $storedObject->getFilename());
$response = $this->httpClient->request('PUT', $object->url, ['body' => $content]);
if (201 !== $response->getStatusCode()) {
throw new Error('Unable to save stored object.');
}
$this->storedObjectManager->write($storedObject, $content);
}
}