add schedule rescheduling

This commit is contained in:
Yisroel Baum 2026-08-19 22:44:14 +03:00
parent b8eeb093d3
commit 7576ccaf09
Signed by: yisroelbaum
GPG key ID: 0FA60884F75520A9
9 changed files with 314 additions and 5 deletions

View file

@ -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;