Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
DeleteExpenseHandler
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
2 / 2
2
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
 handle
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3declare(strict_types=1);
4
5namespace App\Expense\Application\Command;
6
7use App\Expense\Application\OwnedExpenseFinder;
8use App\Expense\Domain\ExpenseRepository;
9use App\Expense\Domain\ValueObject\ExpenseId;
10use App\Trip\Domain\ValueObject\TripId;
11
12final readonly class DeleteExpenseHandler
13{
14    public function __construct(
15        private OwnedExpenseFinder $finder,
16        private ExpenseRepository $expenses,
17    ) {
18    }
19
20    public function handle(DeleteExpenseCommand $command): void
21    {
22        $expense = $this->finder->getForWrite(
23            new TripId($command->tripId),
24            $command->userId,
25            new ExpenseId($command->expenseId),
26        );
27
28        $this->expenses->remove($expense);
29    }
30}