Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
19 / 19
100.00% covered (success)
100.00%
7 / 7
CRAP
100.00% covered (success)
100.00%
1 / 1
DoctrineTripInvitationRepository
100.00% covered (success)
100.00%
19 / 19
100.00% covered (success)
100.00%
7 / 7
7
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 save
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 remove
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 ofId
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 pendingFor
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 pendingOfTrip
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 pendingOfInvitee
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3declare(strict_types=1);
4
5namespace App\Trip\Infrastructure\Persistence\Doctrine;
6
7use App\Trip\Domain\TripInvitation;
8use App\Trip\Domain\TripInvitationRepository;
9use App\Trip\Domain\ValueObject\InvitationId;
10use App\Trip\Domain\ValueObject\InvitationStatus;
11use App\Trip\Domain\ValueObject\MemberId;
12use App\Trip\Domain\ValueObject\TripId;
13use Doctrine\ORM\EntityManagerInterface;
14
15final class DoctrineTripInvitationRepository implements TripInvitationRepository
16{
17    public function __construct(private readonly EntityManagerInterface $entityManager)
18    {
19    }
20
21    public function save(TripInvitation $invitation): void
22    {
23        $this->entityManager->persist($invitation);
24        $this->entityManager->flush();
25    }
26
27    public function remove(TripInvitation $invitation): void
28    {
29        $this->entityManager->remove($invitation);
30        $this->entityManager->flush();
31    }
32
33    public function ofId(InvitationId $id): ?TripInvitation
34    {
35        return $this->entityManager->find(TripInvitation::class, $id);
36    }
37
38    public function pendingFor(TripId $tripId, MemberId $inviteeId): ?TripInvitation
39    {
40        return $this->entityManager->getRepository(TripInvitation::class)->findOneBy([
41            'tripId' => $tripId,
42            'inviteeId' => $inviteeId,
43            'status' => InvitationStatus::PENDING,
44        ]);
45    }
46
47    public function pendingOfTrip(TripId $tripId): array
48    {
49        return $this->entityManager->getRepository(TripInvitation::class)->findBy(
50            ['tripId' => $tripId, 'status' => InvitationStatus::PENDING],
51            ['createdAt' => 'ASC'],
52        );
53    }
54
55    public function pendingOfInvitee(MemberId $inviteeId): array
56    {
57        return $this->entityManager->getRepository(TripInvitation::class)->findBy(
58            ['inviteeId' => $inviteeId, 'status' => InvitationStatus::PENDING],
59            ['createdAt' => 'DESC'],
60        );
61    }
62}