Backup #1994

ID1994
Dateipfad/var/www/dev.campus.systemische-tools.de/src/Domain/Entity/TaskAssignment.php
Version2
Typ modified
Größe6.2 KB
Hashf058231862775bb80c884790ae62d5d0a8ecc42dbca6fcb7c9a97940fb189108
Datum2025-12-28 13:58:57
Geändert vonclaude-code-hook
GrundClaude Code Pre-Hook Backup vor Edit-Operation
Datei existiert Ja

Dateiinhalt

<?php

declare(strict_types=1);

namespace Domain\Entity;

// @responsibility: Task-Zuweisung-Entität (human/AI)

use Domain\ValueObject\AssigneeType;

class TaskAssignment
{
    private ?int $id = null;
    private int $taskId;
    private string $assignee;
    private AssigneeType $assigneeType;
    private ?string $modelName = null;
    private string $assignedBy;
    private string $assignedByType = 'human';
    private string $status = 'pending';
    private \DateTimeImmutable $assignedAt;
    private ?\DateTimeImmutable $acceptedAt = null;
    private ?\DateTimeImmutable $completedAt = null;
    private ?string $notes = null;

    public function __construct()
    {
        $this->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 setAssignedAt(\DateTimeImmutable $assignedAt): self
    {
        $this->assignedAt = $assignedAt;

        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;
    }
}

Vollständig herunterladen

Aktionen

Herunterladen

Andere Versionen dieser Datei

ID Version Typ Größe Datum
1995 3 modified 6.1 KB 2025-12-28 13:59
1994 2 modified 6.2 KB 2025-12-28 13:58
809 1 modified 6.1 KB 2025-12-23 08:07

← Zurück zur Übersicht