Backup #841

ID841
Dateipfad/var/www/dev.campus.systemische-tools.de/src/UseCases/Prompts/ManagePromptsUseCase.php
Version2
Typ modified
Größe3.2 KB
Hashe5839b1b89ae21cf69cb764e1208de1892f252e43aa5d236a30b3fa871889e1b
Datum2025-12-23 08:17:05
Geändert vonclaude-code-hook
GrundClaude Code Pre-Hook Backup vor Edit-Operation
Datei existiert Ja

Dateiinhalt

<?php

declare(strict_types=1);

namespace UseCases\Prompts;

// @responsibility: Verwaltet Prompts (CRUD, Duplizieren)

use Infrastructure\Persistence\PromptsRepository;

final class ManagePromptsUseCase
{
    private PromptsRepository $promptsRepo;

    public function __construct(?PromptsRepository $promptsRepo = null)
    {
        $this->promptsRepo = $promptsRepo ?? new PromptsRepository();
    }

    public function getAll(): array
    {
        return array_map(
            fn (array $row) => PromptDTO::fromArray($row),
            $this->promptsRepo->findAll()
        );
    }

    public function getById(int $id): ?PromptDTO
    {
        $data = $this->promptsRepo->findById($id);

        return $data !== null ? PromptDTO::fromArray($data) : null;
    }

    public function getActivePrompts(): array
    {
        return $this->promptsRepo->findActivePrompts();
    }

    public function create(
        string $name,
        string $version,
        string $content,
        bool $isActive
    ): PromptResult {
        $name = trim($name);
        $content = trim($content);

        if ($name === '' || $content === '') {
            return PromptResult::error('Name und Inhalt sind erforderlich.');
        }

        $id = $this->promptsRepo->create($name, $version, $content, $isActive ? 1 : 0);

        return PromptResult::success($id, 'Prompt erfolgreich erstellt.');
    }

    public function update(
        int $id,
        string $name,
        string $version,
        string $content,
        bool $isActive
    ): PromptResult {
        $name = trim($name);
        $content = trim($content);

        if ($name === '' || $content === '') {
            return PromptResult::error('Name und Inhalt sind erforderlich.');
        }

        $existing = $this->promptsRepo->findById($id);
        if ($existing === null) {
            return PromptResult::error('Prompt nicht gefunden.');
        }

        $this->promptsRepo->update($id, $name, $version, $content, $isActive ? 1 : 0);

        return PromptResult::success($id, 'Prompt aktualisiert.');
    }

    public function delete(int $id): PromptResult
    {
        $existing = $this->promptsRepo->findById($id);
        if ($existing === null) {
            return PromptResult::error('Prompt nicht gefunden.');
        }

        $criticCount = $this->promptsRepo->countLinkedCritics($id);
        if ($criticCount > 0) {
            return PromptResult::error("Kann nicht gelöscht werden: {$criticCount} Critics verknüpft.");
        }

        $this->promptsRepo->delete($id);

        return PromptResult::success($id, 'Prompt gelöscht.');
    }

    public function duplicate(int $id): PromptResult
    {
        $existing = $this->promptsRepo->findById($id);
        if ($existing === null) {
            return PromptResult::error('Prompt nicht gefunden.');
        }

        $newName = $existing['name'] . ' (Kopie)';
        $newId = $this->promptsRepo->duplicate($id, $newName, '1.0');

        return PromptResult::success($newId, 'Prompt dupliziert.');
    }

    public function getLinkedCritics(int $promptId): array
    {
        return $this->promptsRepo->findLinkedCritics($promptId);
    }

    public function getStatistics(): array
    {
        return $this->promptsRepo->getStatistics();
    }
}

Vollständig herunterladen

Aktionen

Herunterladen

Andere Versionen dieser Datei

ID Version Typ Größe Datum
841 2 modified 3.2 KB 2025-12-23 08:17
720 1 modified 3.2 KB 2025-12-23 07:55

← Zurück zur Übersicht