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

@ -38,6 +38,39 @@ class EloquentScheduleRepository implements ScheduleRepository
});
}
public function reschedule(RescheduleScheduleDto $dto): Schedule
{
return DB::transaction(function () use ($dto): Schedule {
$model = ScheduleModel::query()
->where('id', $dto->scheduleId)
->where('user_id', $dto->user->getId())
->lockForUpdate()
->first();
if ($model === null) {
throw new DomainException(
"Schedule with id {$dto->scheduleId} not found",
);
}
$model->start_date = $dto->startDate->format('Y-m-d');
$model->target_date = $dto->targetDate->format('Y-m-d');
$model->save();
foreach ($dto->assignments as $assignmentDto) {
ScheduleAssignmentModel::query()
->where('id', $assignmentDto->id)
->where('schedule_id', $dto->scheduleId)
->whereNull('completed_at')
->update([
'scheduled_date' => $assignmentDto->scheduledDate
->format('Y-m-d'),
]);
}
return $this->toDomain($model, $dto->user);
});
}
public function findForUser(int $id, User $user): ?Schedule
{
$model = ScheduleModel::query()