diff --git a/app/Plan/JsonPlanRepository.php b/app/Plan/JsonPlanRepository.php index 8a88838..8c73d8a 100644 --- a/app/Plan/JsonPlanRepository.php +++ b/app/Plan/JsonPlanRepository.php @@ -90,4 +90,29 @@ class JsonPlanRepository implements PlanRepository return $maxId + 1; } + + public function findByUser(User $user): array + { + $plans = array_filter( + $this->readPlans(), + function ($data) use ($user) { + return $data['userId'] === $user->getId(); + } + ); + + return array_map( + function ($data) { + $user = $this->userRepository->find($data['userId']); + if ($user === null) { + return null; + } + return new Plan( + id: $data['id'], + name: $data['name'], + user: $user, + ); + }, + $plans + ); + } } diff --git a/app/Plan/PlanRepository.php b/app/Plan/PlanRepository.php index a962c0f..0585edc 100644 --- a/app/Plan/PlanRepository.php +++ b/app/Plan/PlanRepository.php @@ -2,8 +2,14 @@ namespace App\Plan; +use App\User\User; + interface PlanRepository { public function create(CreatePlanDto $dto): Plan; public function find(int $id): ?Plan; + /** + * @return Plan[] + */ + public function findByUser(User $user): array; } diff --git a/tests/Fakes/FakePlanRepository.php b/tests/Fakes/FakePlanRepository.php index 45e2e85..8c18b00 100644 --- a/tests/Fakes/FakePlanRepository.php +++ b/tests/Fakes/FakePlanRepository.php @@ -5,9 +5,13 @@ namespace Tests\Fakes; use App\Plan\CreatePlanDto; use App\Plan\Plan; use App\Plan\PlanRepository; +use App\User\User; class FakePlanRepository implements PlanRepository { + /** + * @var Plan[] + */ private array $existingPlans = []; public function create(CreatePlanDto $dto): Plan @@ -37,4 +41,24 @@ class FakePlanRepository implements PlanRepository } ); } + + public function findByUser(User $user): array + { + $plans = array_filter( + $this->existingPlans, + function (Plan $plan) use ($user) { + return $plan->getUser()->getId() === $user->getId(); + } + ); + return array_map( + function (Plan $plan) { + return new Plan( + id: $plan->getId(), + name: $plan->getName(), + user: $plan->getUser(), + ); + }, + $plans + ); + } }