Backup #709

ID709
Dateipfad/var/www/dev.campus.systemische-tools.de/src/UseCases/Task/AssignTaskUseCase.php
Version1
Typ modified
Größe2.8 KB
Hash6cd6966d84abf345a0e1db236baca78ae29a305e3b55852466d2313a65ac885e
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\TaskAssignment;
use Domain\Entity\TaskComment;
use Domain\ValueObject\AssigneeType;
use Infrastructure\Persistence\TaskAssignmentRepository;
use Infrastructure\Persistence\TaskCommentRepository;
use Infrastructure\Persistence\TaskRepository;

class AssignTaskUseCase
{
    private TaskRepository $taskRepository;
    private TaskAssignmentRepository $assignmentRepository;
    private TaskCommentRepository $commentRepository;

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

    public function execute(int $taskId, array $data): TaskAssignment
    {
        $this->validate($data);

        $task = $this->taskRepository->find($taskId);
        if ($task === null) {
            throw new \InvalidArgumentException("Task {$taskId} not found");
        }

        $assigneeType = AssigneeType::from($data['assignee_type']);

        $assignment = new TaskAssignment();
        $assignment->setTaskId($taskId);
        $assignment->setAssignee($data['assignee']);
        $assignment->setAssigneeType($assigneeType);
        $assignment->setAssignedBy($data['assigned_by'] ?? 'system');
        $assignment->setAssignedByType($data['assigned_by_type'] ?? 'human');

        if (isset($data['model_name'])) {
            $assignment->setModelName($data['model_name']);
        }

        if (isset($data['notes'])) {
            $assignment->setNotes($data['notes']);
        }

        $id = $this->assignmentRepository->save($assignment);
        $assignment->setId($id);

        $comment = TaskComment::createAssignmentNote(
            $taskId,
            $assignment->getAssignedBy(),
            $assignment->getAssignedByType(),
            $assignment->getAssignee(),
            $assigneeType->label()
        );
        $this->commentRepository->save($comment);

        return $assignment;
    }

    private function validate(array $data): void
    {
        if (!isset($data['assignee']) || $data['assignee'] === '') {
            throw new \InvalidArgumentException('Assignee is required');
        }

        if (!isset($data['assignee_type']) || $data['assignee_type'] === '') {
            throw new \InvalidArgumentException('Assignee type is required');
        }

        try {
            AssigneeType::from($data['assignee_type']);
        } catch (\ValueError $e) {
            throw new \InvalidArgumentException('Invalid assignee type');
        }
    }
}

Vollständig herunterladen

Aktionen

Herunterladen

Andere Versionen dieser Datei

ID Version Typ Größe Datum
826 2 modified 2.9 KB 2025-12-23 08:14
709 1 modified 2.8 KB 2025-12-23 07:55

← Zurück zur Übersicht