GetInboxMessages   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 41
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 6
eloc 21
c 1
b 0
f 0
dl 0
loc 41
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
A __invoke() 0 32 5
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