Goal-Calibration/app/ScheduledNode/UseCases/CreateScheduledNode.php

47 lines
1.2 KiB
PHP

<?php
namespace App\ScheduledNode\UseCases;
use App\Exceptions\BadRequestException;
use App\Plan\PlanRepository;
use App\ScheduledNode\ScheduledNode;
use App\ScheduledNode\CreateScheduledNodeDto;
use App\ScheduledNode\ScheduledNodeRepository;
use DomainException;
class CreateScheduledNode
{
public function __construct(
private ScheduledNodeRepository $scheduledNodeRepo,
private PlanRepository $planRepo,
) {}
/**
* @throws BadRequestException
* @throws DomainException
*/
public function execute(
CreateScheduledNodeRequest $request
): ScheduledNode {
if ($request->date === null) {
throw new BadRequestException('date is required');
}
if ($request->planId === null) {
throw new BadRequestException('planId is required');
}
$id = $request->planId;
$plan = $this->planRepo->find($id);
if ($plan === null) {
throw new DomainException("Plan with id: $id doesnt exist");
}
return $this->scheduledNodeRepo->create(
new CreateScheduledNodeDto(
date: $request->date,
plan: $plan,
)
);
}
}