51 lines
1.4 KiB
PHP
51 lines
1.4 KiB
PHP
<?php
|
|
|
|
namespace App\ScheduledNode\UseCases;
|
|
|
|
use App\Exceptions\BadRequestException;
|
|
use App\ScheduledNode\ScheduledNode;
|
|
use App\ScheduledNode\ScheduledNodeRepository;
|
|
use App\User\UserRepository;
|
|
use DateTimeImmutable;
|
|
use DomainException;
|
|
|
|
class GetTodaysSchedule
|
|
{
|
|
public function __construct(
|
|
private UserRepository $userRepo,
|
|
private ScheduledNodeRepository $scheduledNodeRepo,
|
|
) {}
|
|
|
|
/**
|
|
* @return ScheduledNode[]
|
|
*
|
|
* @throws BadRequestException
|
|
* @throws DomainException
|
|
*/
|
|
public function execute(GetTodaysScheduleRequest $request): array
|
|
{
|
|
if ($request->date === null) {
|
|
throw new BadRequestException('date is required');
|
|
}
|
|
if ($request->userId === null) {
|
|
throw new BadRequestException('userId is required');
|
|
}
|
|
$date = new DateTimeImmutable($request->date);
|
|
$userId = $request->userId;
|
|
$user = $this->userRepo->find($userId);
|
|
if ($user === null) {
|
|
throw new DomainException(
|
|
"User with id: $userId doesnt exist"
|
|
);
|
|
}
|
|
$scheduledNodes = $this->scheduledNodeRepo->findByUser($user);
|
|
|
|
return array_filter(
|
|
$scheduledNodes,
|
|
function (ScheduledNode $node) use ($date) {
|
|
return $node->getDate() <= $date
|
|
&& $node->getCompleted() === false;
|
|
}
|
|
);
|
|
}
|
|
}
|