mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-08-20 14:43:49 +00:00
refactor: Use StoredObjectManager
.
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user