add schedule rescheduling
This commit is contained in:
parent
b8eeb093d3
commit
7576ccaf09
9 changed files with 314 additions and 5 deletions
|
|
@ -2,8 +2,9 @@
|
|||
|
||||
namespace Tests\Fakes;
|
||||
|
||||
use App\Schedule\CreateScheduleDto;
|
||||
use App\Schedule\AssignmentForDate;
|
||||
use App\Schedule\CreateScheduleDto;
|
||||
use App\Schedule\RescheduleScheduleDto;
|
||||
use App\Schedule\Schedule;
|
||||
use App\Schedule\ScheduleAssignment;
|
||||
use App\Schedule\ScheduleRepository;
|
||||
|
|
@ -51,6 +52,50 @@ class FakeScheduleRepository implements ScheduleRepository
|
|||
return $this->copy($schedule);
|
||||
}
|
||||
|
||||
public function reschedule(RescheduleScheduleDto $dto): Schedule
|
||||
{
|
||||
$schedule = $this->schedules[$dto->scheduleId] ?? null;
|
||||
if ($schedule === null || $schedule->getUser()->getId()
|
||||
!== $dto->user->getId()
|
||||
) {
|
||||
throw new DomainException(
|
||||
"Schedule with id {$dto->scheduleId} not found",
|
||||
);
|
||||
}
|
||||
|
||||
$datesByAssignmentId = [];
|
||||
foreach ($dto->assignments as $assignmentDto) {
|
||||
$datesByAssignmentId[$assignmentDto->id] =
|
||||
$assignmentDto->scheduledDate;
|
||||
}
|
||||
$assignments = [];
|
||||
foreach ($schedule->getAssignments() as $assignment) {
|
||||
$assignments[] = new ScheduleAssignment(
|
||||
id: $assignment->getId(),
|
||||
name: $assignment->getName(),
|
||||
kind: $assignment->getKind(),
|
||||
path: $assignment->getPath(),
|
||||
scheduledDate: $datesByAssignmentId[$assignment->getId()]
|
||||
?? $assignment->getScheduledDate(),
|
||||
position: $assignment->getPosition(),
|
||||
completedAt: $assignment->getCompletedAt(),
|
||||
);
|
||||
}
|
||||
|
||||
$rescheduled = new Schedule(
|
||||
id: $schedule->getId(),
|
||||
user: $schedule->getUser(),
|
||||
setName: $schedule->getSetName(),
|
||||
elementKind: $schedule->getElementKind(),
|
||||
startDate: $dto->startDate,
|
||||
targetDate: $dto->targetDate,
|
||||
assignments: $assignments,
|
||||
);
|
||||
$this->schedules[$dto->scheduleId] = $rescheduled;
|
||||
|
||||
return $this->copy($rescheduled);
|
||||
}
|
||||
|
||||
public function findForUser(int $id, User $user): ?Schedule
|
||||
{
|
||||
$schedule = $this->schedules[$id] ?? null;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue