<?php
namespace App\Controller\Api;
use Evo\Infrastructure\MappingORM\Letter;
use Evo\Infrastructure\MappingORM\LetterSignature;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
use Symfony\Component\Serializer\SerializerInterface;
final class CreateOrUpdateLetterAction
{
public const POST_ROUTE_NAME = 'api_letters_post_collection';
public function __invoke(Request $request, SerializerInterface $serializer): Letter
{
$envelopeFrontFile = $request->files->get('envelopeFrontFile');
$envelopeBackFile = $request->files->get('envelopeBackFile');
$contentFile = $request->files->get('contentFile');
$letterSignatureFile = $request->files->get('letterSignature')['signatureFile'] ?? null;
$route = $request->attributes->get('_route');
/** @var Letter $letter */
$letter = $request->attributes->get('data');
if (!$letter->getEnvelopeFrontPath() && !$letter->getEnvelopeFrontPathAWS() && !$envelopeFrontFile && self::POST_ROUTE_NAME === $route) {
throw new BadRequestHttpException('"envelopeFrontFile" is required');
}
$letter
->setEnvelopeFrontFile($envelopeFrontFile)
->setEnvelopeBackFile($envelopeBackFile)
->setContentFile($contentFile);
if ($letterSignatureFile) {
$letterSignature = $letter->getLetterSignature() ?? new LetterSignature();
$letterSignature->setSignatureFile($letterSignatureFile);
$letter->setLetterSignature($letterSignature);
}
return $letter;
}
}