assignedAt = new \DateTimeImmutable(); } // Getters public function getId(): ?int { return $this->id; } public function getTaskId(): int { return $this->taskId; } public function getAssignee(): string { return $this->assignee; } public function getAssigneeType(): AssigneeType { return $this->assigneeType; } public function getModelName(): ?string { return $this->modelName; } public function getAssignedBy(): string { return $this->assignedBy; } public function getAssignedByType(): string { return $this->assignedByType; } public function getStatus(): string { return $this->status; } public function getAssignedAt(): \DateTimeImmutable { return $this->assignedAt; } public function getAcceptedAt(): ?\DateTimeImmutable { return $this->acceptedAt; } public function getCompletedAt(): ?\DateTimeImmutable { return $this->completedAt; } public function getNotes(): ?string { return $this->notes; } // Setters public function setId(int $id): self { $this->id = $id; return $this; } public function setTaskId(int $taskId): self { $this->taskId = $taskId; return $this; } public function setAssignee(string $assignee): self { $this->assignee = $assignee; return $this; } public function setAssigneeType(AssigneeType $assigneeType): self { $this->assigneeType = $assigneeType; $this->modelName = $assigneeType->defaultModel(); return $this; } public function setModelName(?string $modelName): self { $this->modelName = $modelName; return $this; } public function setAssignedBy(string $assignedBy): self { $this->assignedBy = $assignedBy; return $this; } public function setAssignedByType(string $assignedByType): self { $this->assignedByType = $assignedByType; return $this; } public function setStatus(string $status): self { $this->status = $status; return $this; } public function setAcceptedAt(?\DateTimeImmutable $acceptedAt): self { $this->acceptedAt = $acceptedAt; return $this; } public function setCompletedAt(?\DateTimeImmutable $completedAt): self { $this->completedAt = $completedAt; return $this; } public function setNotes(?string $notes): self { $this->notes = $notes; return $this; } public function accept(): self { $this->status = 'accepted'; $this->acceptedAt = new \DateTimeImmutable(); return $this; } public function start(): self { $this->status = 'in_progress'; return $this; } public function complete(): self { $this->status = 'completed'; $this->completedAt = new \DateTimeImmutable(); return $this; } public function reject(): self { $this->status = 'rejected'; return $this; } public function toArray(): array { return [ 'id' => $this->id, 'task_id' => $this->taskId, 'assignee' => $this->assignee, 'assignee_type' => $this->assigneeType->value, 'model_name' => $this->modelName, 'assigned_by' => $this->assignedBy, 'assigned_by_type' => $this->assignedByType, 'status' => $this->status, 'assigned_at' => $this->assignedAt->format('Y-m-d H:i:s.u'), 'accepted_at' => $this->acceptedAt?->format('Y-m-d H:i:s.u'), 'completed_at' => $this->completedAt?->format('Y-m-d H:i:s.u'), 'notes' => $this->notes, ]; } public static function fromArray(array $data): self { $assignment = new self(); if (isset($data['id'])) { $assignment->setId((int) $data['id']); } if (isset($data['task_id'])) { $assignment->setTaskId((int) $data['task_id']); } if (isset($data['assignee'])) { $assignment->setAssignee($data['assignee']); } if (isset($data['assignee_type'])) { $assignment->assigneeType = AssigneeType::from($data['assignee_type']); } if (isset($data['model_name'])) { $assignment->setModelName($data['model_name']); } if (isset($data['assigned_by'])) { $assignment->setAssignedBy($data['assigned_by']); } if (isset($data['assigned_by_type'])) { $assignment->setAssignedByType($data['assigned_by_type']); } if (isset($data['status'])) { $assignment->setStatus($data['status']); } if (isset($data['assigned_at'])) { $assignment->setAssignedAt(new \DateTimeImmutable($data['assigned_at'])); } if (isset($data['accepted_at'])) { $assignment->setAcceptedAt(new \DateTimeImmutable($data['accepted_at'])); } if (isset($data['completed_at'])) { $assignment->setCompletedAt(new \DateTimeImmutable($data['completed_at'])); } if (isset($data['notes'])) { $assignment->setNotes($data['notes']); } return $assignment; } }