Backup #710

ID710
Dateipfad/var/www/dev.campus.systemische-tools.de/src/UseCases/Task/UpdateTaskStatusUseCase.php
Version1
Typ modified
Größe2.4 KB
Hash3ed46ddc6aca5a50818efe4f514996148df0f9cfa5c817f238f8c6e0e3f4551b
Datum2025-12-23 07:55:03
Geändert vonclaude-code-hook
GrundClaude Code Pre-Hook Backup vor Edit-Operation
Datei existiert Ja

Dateiinhalt

<?php

namespace UseCases\Task;

use Domain\Entity\Task;
use Domain\Entity\TaskComment;
use Domain\ValueObject\TaskStatus;
use Infrastructure\Persistence\TaskCommentRepository;
use Infrastructure\Persistence\TaskRepository;

class UpdateTaskStatusUseCase
{
    private TaskRepository $taskRepository;
    private TaskCommentRepository $commentRepository;

    public function __construct(
        ?TaskRepository $taskRepository = null,
        ?TaskCommentRepository $commentRepository = null
    ) {
        $this->taskRepository = $taskRepository ?? new TaskRepository();
        $this->commentRepository = $commentRepository ?? new TaskCommentRepository();
    }

    public function execute(int $taskId, string $newStatus, string $updatedBy, string $updatedByType = 'human'): Task
    {
        $task = $this->taskRepository->find($taskId);
        if ($task === null) {
            throw new \InvalidArgumentException("Task {$taskId} not found");
        }

        $newStatusEnum = TaskStatus::from($newStatus);
        $oldStatus = $task->getStatus();

        if (!$oldStatus->canTransitionTo($newStatusEnum)) {
            throw new \InvalidArgumentException(
                "Cannot transition from {$oldStatus->value} to {$newStatus}"
            );
        }

        $task->setStatus($newStatusEnum);
        $this->taskRepository->update($task);

        $comment = TaskComment::createStatusChange(
            $taskId,
            $updatedBy,
            $updatedByType,
            $oldStatus->label(),
            $newStatusEnum->label()
        );
        $this->commentRepository->save($comment);

        return $task;
    }

    public function startTask(int $taskId, string $updatedBy, string $updatedByType = 'human'): Task
    {
        return $this->execute($taskId, 'in_progress', $updatedBy, $updatedByType);
    }

    public function completeTask(int $taskId, string $updatedBy, string $updatedByType = 'human'): Task
    {
        return $this->execute($taskId, 'completed', $updatedBy, $updatedByType);
    }

    public function failTask(int $taskId, string $updatedBy, string $updatedByType = 'human'): Task
    {
        return $this->execute($taskId, 'failed', $updatedBy, $updatedByType);
    }

    public function cancelTask(int $taskId, string $updatedBy, string $updatedByType = 'human'): Task
    {
        return $this->execute($taskId, 'cancelled', $updatedBy, $updatedByType);
    }
}

Vollständig herunterladen

Aktionen

Herunterladen

Andere Versionen dieser Datei

ID Version Typ Größe Datum
2072 5 modified 2.4 KB 2025-12-28 23:32
2071 4 modified 2.2 KB 2025-12-28 23:32
1458 3 modified 2.2 KB 2025-12-25 17:01
830 2 modified 2.5 KB 2025-12-23 08:15
710 1 modified 2.4 KB 2025-12-23 07:55

← Zurück zur Übersicht