snapshot schedule source data

This commit is contained in:
Yisroel Baum 2026-08-10 22:36:14 +03:00
parent 14fe2fcb46
commit f500bd6095
Signed by: yisroelbaum
GPG key ID: 0FA60884F75520A9
14 changed files with 84 additions and 87 deletions

View file

@ -2,27 +2,19 @@
namespace App\Schedule;
use App\Element\ElementRepository;
use App\Set\SetRepository;
use App\User\User;
use DateTimeImmutable;
use DateTimeZone;
use Illuminate\Support\Facades\DB;
use RuntimeException;
class EloquentScheduleRepository implements ScheduleRepository
{
public function __construct(
private SetRepository $setRepository,
private ElementRepository $elementRepository,
) {}
public function create(CreateScheduleDto $dto): Schedule
{
return DB::transaction(function () use ($dto): Schedule {
$model = ScheduleModel::create([
'user_id' => $dto->user->getId(),
'set_id' => $dto->set->getId(),
'set_name' => $dto->setName,
'element_kind' => $dto->elementKind,
'start_date' => $dto->startDate->format('Y-m-d'),
'target_date' => $dto->targetDate->format('Y-m-d'),
@ -31,7 +23,9 @@ class EloquentScheduleRepository implements ScheduleRepository
foreach ($dto->assignments as $assignmentDto) {
ScheduleAssignmentModel::create([
'schedule_id' => $model->id,
'element_id' => $assignmentDto->element->getId(),
'element_name' => $assignmentDto->name,
'element_kind' => $assignmentDto->kind,
'element_path' => $assignmentDto->path,
'scheduled_date' => $assignmentDto->scheduledDate
->format('Y-m-d'),
'position' => $assignmentDto->position,
@ -69,11 +63,6 @@ class EloquentScheduleRepository implements ScheduleRepository
private function toDomain(ScheduleModel $model, User $user): Schedule
{
$set = $this->setRepository->find($model->set_id);
if ($set === null) {
throw new RuntimeException('schedule set not found');
}
$assignmentModels = ScheduleAssignmentModel::query()
->where('schedule_id', $model->id)
->orderBy('position')
@ -82,16 +71,11 @@ class EloquentScheduleRepository implements ScheduleRepository
$assignments = [];
foreach ($assignmentModels as $assignmentModel) {
$element = $this->elementRepository->find(
$assignmentModel->element_id,
);
if ($element === null) {
throw new RuntimeException('schedule element not found');
}
$assignments[] = new ScheduleAssignment(
id: $assignmentModel->id,
element: $element,
name: $assignmentModel->element_name,
kind: $assignmentModel->element_kind,
path: $assignmentModel->element_path,
scheduledDate: $this->date($assignmentModel->scheduled_date),
position: $assignmentModel->position,
);
@ -100,7 +84,7 @@ class EloquentScheduleRepository implements ScheduleRepository
return new Schedule(
id: $model->id,
user: $user,
set: $set,
setName: $model->set_name,
elementKind: $model->element_kind,
startDate: $this->date($model->start_date),
targetDate: $this->date($model->target_date),