AbstractPhotoController::sortPhotos()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 4
c 1
b 0
f 0
nc 1
nop 2
dl 0
loc 7
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace App\Controller;
6
7
use App\Entity\Photo;
8
use App\Entity\Property;
9
use App\Service\FileUploader;
10
use Doctrine\Persistence\ManagerRegistry;
11
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
12
use Symfony\Component\HttpFoundation\File\UploadedFile;
13
use Symfony\Component\HttpFoundation\JsonResponse;
14
use Symfony\Component\HttpFoundation\Request;
15
use Symfony\Component\Validator\ConstraintViolation;
16
17
abstract class AbstractPhotoController extends AbstractController
18
{
19
    protected ManagerRegistry $doctrine;
20
21
    public function __construct(ManagerRegistry $doctrine)
22
    {
23
        $this->doctrine = $doctrine;
24
    }
25
26
    protected function uploadPhoto(Property $property, Request $request, FileUploader $fileUploader): JsonResponse
27
    {
28
        /** @var UploadedFile $uploadedFile */
29
        $uploadedFile = $request->files->get('file');
30
        $violations = $fileUploader->validate($uploadedFile);
31
32
        if ($violations->count() > 0) {
33
            /** @var ConstraintViolation $violation */
34
            $violation = $violations[0];
35
            $this->addFlash('danger', $violation->getMessage());
36
37
            return new JsonResponse(['status' => 'fail'], 422);
38
        }
39
40
        $fileName = $fileUploader->upload($uploadedFile);
41
42
        $photo = new Photo();
43
        $photo->setProperty($property)
44
            ->setSortOrder(0)
45
            ->setPhoto($fileName);
46
47
        $em = $this->doctrine->getManager();
48
        $em->persist($photo);
49
        $em->flush();
50
51
        return new JsonResponse(['status' => 'ok']);
52
    }
53
54
    protected function sortPhotos(Request $request, Property $property): JsonResponse
55
    {
56
        $ids = $request->request->all('ids');
57
        $repository = $this->doctrine->getRepository(Photo::class);
58
        $repository->reorderPhotos($property, $ids);
59
60
        return new JsonResponse(['status' => 'ok']);
61
    }
62
}
63