Passed
Pull Request — master (#15)
by Paweł
03:01
created

ApiLessonsController::getLessonById()   A

Complexity

Conditions 3
Paths 2

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 4
nc 2
nop 1
dl 0
loc 8
rs 10
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace App\Controller;
6
7
use App\Form\LessonProgressType;
8
use App\Provider\LessonProviderInterface;
9
use App\Provider\UserLessonProviderInterface;
10
use Doctrine\ORM\EntityManagerInterface;
11
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
12
use Symfony\Component\Form\FormFactoryInterface;
13
use Symfony\Component\HttpFoundation\Request;
14
use Symfony\Component\HttpFoundation\Response;
15
use Symfony\Component\Serializer\SerializerInterface;
16
17
final class ApiLessonsController extends AbstractController
18
{
19
    private $lessonProvider;
20
21
    private $serializer;
22
23
    public function __construct(LessonProviderInterface $lessonProvider, SerializerInterface $serializer)
24
    {
25
        $this->lessonProvider = $lessonProvider;
26
        $this->serializer = $serializer;
27
    }
28
29
    public function getSingleModule(string $lessonId): Response
30
    {
31
        return new Response($this->serializer->serialize(
32
            $this->lessonProvider->getOneById($lessonId),
33
            'json',
34
            ['groups' => ['lesson_details']]
35
        ));
36
    }
37
38
    public function setProgress(
39
        Request $request,
40
        EntityManagerInterface $entityManager,
41
        UserLessonProviderInterface $userLessonProvider,
42
        FormFactoryInterface $formFactory,
43
        string $lessonId
44
    ): Response {
45
        $lesson = $this->lessonProvider->getOneById($lessonId);
46
        $form = $formFactory->createNamed('', LessonProgressType::class, [], ['method' => Request::METHOD_PUT]);
47
        $form->handleRequest($request);
48
        if ($form->isSubmitted() && $form->isValid()) {
49
            $userLesson = $userLessonProvider->getCurrentUserLesson($lesson);
50
            $userLesson->setCompleted((bool) $form->getData()['completed']);
51
            $entityManager->flush();
52
53
            return new Response($this->serializer->serialize($lesson, 'json', ['groups' => ['lesson_details']]), Response::HTTP_OK);
54
        }
55
56
        return new Response($this->serializer->serialize($form, 'json'), Response::HTTP_BAD_REQUEST);
57
    }
58
}
59