snapshot schedule source data
This commit is contained in:
parent
14fe2fcb46
commit
f500bd6095
14 changed files with 84 additions and 87 deletions
|
|
@ -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),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue