GetInboxMessages::__invoke()   A
last analyzed

Complexity

Conditions 5
Paths 16

Size

Total Lines 32
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 18
c 1
b 0
f 0
dl 0
loc 32
rs 9.3554
cc 5
nc 16
nop 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace ProjetNormandie\MessageBundle\Controller\User;
6
7
use ApiPlatform\Doctrine\Orm\Paginator;
8
use Doctrine\ORM\Tools\Pagination\Paginator as DoctrinePaginator;
9
use ProjetNormandie\MessageBundle\Repository\MessageRepository;
10
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
11
use Symfony\Component\HttpFoundation\Request;
12
13
class GetInboxMessages extends AbstractController
14
{
15
    private MessageRepository $messageRepository;
16
17
    public function __construct(MessageRepository $messageRepository)
18
    {
19
        $this->messageRepository = $messageRepository;
20
    }
21
22
    public function __invoke(Request $request): Paginator
23
    {
24
        $user = $this->getUser();
25
26
        // Récupérer les paramètres de pagination
27
        $page = $request->query->getInt('page', 1);
28
        $itemsPerPage = $request->query->getInt('itemsPerPage', 10);
29
30
        // Récupérer les filtres
31
        $filters = [];
32
        if ($request->query->has('search')) {
33
            $filters['search'] = $request->query->get('search');
34
        }
35
        if ($request->query->has('type')) {
36
            $filters['type'] = $request->query->get('type');
37
        }
38
        if ($request->query->has('sender')) {
39
            $filters['sender'] = $request->query->get('sender');
40
        }
41
        if ($request->query->has('isOpened')) {
42
            $filters['isOpened'] = $request->query->getBoolean('isOpened');
43
        }
44
45
        $queryBuilder = $this->messageRepository->getInboxMessages($user, $filters);
46
47
        // Appliquer la pagination manuellement
48
        $firstResult = ($page - 1) * $itemsPerPage;
49
        $queryBuilder
50
            ->setFirstResult($firstResult)
51
            ->setMaxResults($itemsPerPage);
52
53
        return new Paginator(new DoctrinePaginator($queryBuilder));
54
    }
55
}
56