Backup #1463

ID1463
Dateipfad/var/www/dev.campus.systemische-tools.de/src/UseCases/Task/CreateTaskUseCase.php
Version4
Typ modified
Größe2.3 KB
Hashe3eeb36f1bcf10ac7b0e790964b6a60a1a92dcd8feb80ea6e6737eb089fb5546
Datum2025-12-25 17:01:42
Geändert vonclaude-code-hook
GrundClaude Code Pre-Hook Backup vor Edit-Operation
Datei existiert Ja

Dateiinhalt

<?php

declare(strict_types=1);

namespace UseCases\Task;

// @responsibility: Erstellt neue Tasks mit optionalen Kommentaren und Parent-Verknüpfung

use Domain\Entity\Task;
use Domain\Entity\TaskComment;
use Domain\Repository\TaskRepositoryInterface;
use Domain\ValueObject\TaskType;
use Infrastructure\Persistence\TaskCommentRepository;

class CreateTaskUseCase
{
    public function __construct(
        private TaskRepositoryInterface $taskRepository,
        private TaskCommentRepository $commentRepository
    ) {
    }

    public function execute(array $data): Task
    {
        $this->validate($data);

        $task = new Task();
        $task->setTitle($data['title']);
        $task->setCreatedBy($data['created_by'] ?? 'system');
        $task->setCreatedByType($data['created_by_type'] ?? 'human');

        if (isset($data['description'])) {
            $task->setDescription($data['description']);
        }

        if (isset($data['type'])) {
            $task->setType($data['type']);
        }

        if (isset($data['parent_task_id'])) {
            $task->setParentTaskId((int) $data['parent_task_id']);
        }

        if (isset($data['due_date'])) {
            $task->setDueDate(new \DateTimeImmutable($data['due_date']));
        }

        if (isset($data['metadata'])) {
            $task->setMetadata($data['metadata']);
        }

        $id = $this->taskRepository->save($task);
        $task->setId($id);

        $comment = new TaskComment();
        $comment->setTaskId($id);
        $comment->setAuthor($task->getCreatedBy());
        $comment->setAuthorType($task->getCreatedByType());
        $comment->setCommentType('note');
        $comment->setContent('Task erstellt');
        $this->commentRepository->save($comment);

        return $task;
    }

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

        if (strlen($data['title']) > 255) {
            throw new \InvalidArgumentException('Title must be 255 characters or less');
        }

        if (isset($data['type']) && !in_array($data['type'], ['human_task', 'ai_task', 'mixed'])) {
            throw new \InvalidArgumentException('Invalid task type');
        }
    }
}

Vollständig herunterladen

Aktionen

Herunterladen

Andere Versionen dieser Datei

ID Version Typ Größe Datum
1475 6 modified 2.1 KB 2025-12-25 17:02
1474 5 modified 2.0 KB 2025-12-25 17:02
1463 4 modified 2.3 KB 2025-12-25 17:01
1460 3 modified 2.2 KB 2025-12-25 17:01
827 2 modified 2.5 KB 2025-12-23 08:14
705 1 modified 2.4 KB 2025-12-23 07:54

← Zurück zur Übersicht