add assignment completion api
This commit is contained in:
parent
916f070455
commit
350d2ec0b7
11 changed files with 281 additions and 16 deletions
|
|
@ -9,6 +9,7 @@ use App\Schedule\ScheduleAssignment;
|
|||
use App\Schedule\ScheduleRepository;
|
||||
use App\User\User;
|
||||
use DateTimeImmutable;
|
||||
use DomainException;
|
||||
|
||||
class FakeScheduleRepository implements ScheduleRepository
|
||||
{
|
||||
|
|
@ -17,6 +18,8 @@ class FakeScheduleRepository implements ScheduleRepository
|
|||
*/
|
||||
private array $schedules = [];
|
||||
|
||||
private int $nextAssignmentId = 1;
|
||||
|
||||
public function create(CreateScheduleDto $dto): Schedule
|
||||
{
|
||||
$id = count($this->schedules) + 1;
|
||||
|
|
@ -24,12 +27,13 @@ class FakeScheduleRepository implements ScheduleRepository
|
|||
|
||||
foreach ($dto->assignments as $assignmentDto) {
|
||||
$assignments[] = new ScheduleAssignment(
|
||||
id: count($assignments) + 1,
|
||||
id: $this->nextAssignmentId++,
|
||||
name: $assignmentDto->name,
|
||||
kind: $assignmentDto->kind,
|
||||
path: $assignmentDto->path,
|
||||
scheduledDate: $assignmentDto->scheduledDate,
|
||||
position: $assignmentDto->position,
|
||||
completedAt: null,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -84,6 +88,7 @@ class FakeScheduleRepository implements ScheduleRepository
|
|||
foreach ($schedule->getAssignments() as $assignment) {
|
||||
if ($assignment->getScheduledDate()->format('Y-m-d')
|
||||
!== $date->format('Y-m-d')
|
||||
|| $assignment->getCompletedAt() !== null
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
|
|
@ -99,21 +104,66 @@ class FakeScheduleRepository implements ScheduleRepository
|
|||
return $assignments;
|
||||
}
|
||||
|
||||
public function findAssignmentForUser(
|
||||
int $id,
|
||||
User $user,
|
||||
): ?ScheduleAssignment {
|
||||
foreach ($this->findAllForUser($user) as $schedule) {
|
||||
foreach ($schedule->getAssignments() as $assignment) {
|
||||
if ($assignment->getId() === $id) {
|
||||
return $this->copyAssignment($assignment);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public function updateAssignment(
|
||||
ScheduleAssignment $assignment,
|
||||
): ScheduleAssignment {
|
||||
foreach ($this->schedules as $id => $schedule) {
|
||||
$assignments = [];
|
||||
$found = false;
|
||||
|
||||
foreach ($schedule->getAssignments() as $storedAssignment) {
|
||||
if ($storedAssignment->getId() === $assignment->getId()) {
|
||||
$assignments[] = $this->copyAssignment($assignment);
|
||||
$found = true;
|
||||
} else {
|
||||
$assignments[] = $this->copyAssignment(
|
||||
$storedAssignment,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if ($found) {
|
||||
$this->schedules[$id] = new Schedule(
|
||||
id: $schedule->getId(),
|
||||
user: $schedule->getUser(),
|
||||
setName: $schedule->getSetName(),
|
||||
elementKind: $schedule->getElementKind(),
|
||||
startDate: $schedule->getStartDate(),
|
||||
targetDate: $schedule->getTargetDate(),
|
||||
assignments: $assignments,
|
||||
);
|
||||
|
||||
return $this->copyAssignment($assignment);
|
||||
}
|
||||
}
|
||||
|
||||
throw new DomainException(
|
||||
"Assignment with id {$assignment->getId()} not found",
|
||||
);
|
||||
}
|
||||
|
||||
private function copy(Schedule $schedule): Schedule
|
||||
{
|
||||
$assignments = array_map(
|
||||
function (ScheduleAssignment $assignment): ScheduleAssignment {
|
||||
return new ScheduleAssignment(
|
||||
id: $assignment->getId(),
|
||||
name: $assignment->getName(),
|
||||
kind: $assignment->getKind(),
|
||||
path: $assignment->getPath(),
|
||||
scheduledDate: $assignment->getScheduledDate(),
|
||||
position: $assignment->getPosition(),
|
||||
);
|
||||
},
|
||||
$schedule->getAssignments(),
|
||||
);
|
||||
$assignments = array_map(function (
|
||||
ScheduleAssignment $assignment,
|
||||
): ScheduleAssignment {
|
||||
return $this->copyAssignment($assignment);
|
||||
}, $schedule->getAssignments());
|
||||
|
||||
return new Schedule(
|
||||
id: $schedule->getId(),
|
||||
|
|
@ -125,4 +175,18 @@ class FakeScheduleRepository implements ScheduleRepository
|
|||
assignments: $assignments,
|
||||
);
|
||||
}
|
||||
|
||||
private function copyAssignment(
|
||||
ScheduleAssignment $assignment,
|
||||
): ScheduleAssignment {
|
||||
return new ScheduleAssignment(
|
||||
id: $assignment->getId(),
|
||||
name: $assignment->getName(),
|
||||
kind: $assignment->getKind(),
|
||||
path: $assignment->getPath(),
|
||||
scheduledDate: $assignment->getScheduledDate(),
|
||||
position: $assignment->getPosition(),
|
||||
completedAt: $assignment->getCompletedAt(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue