ManageConfigUseCase.php
- Pfad:
src/UseCases/Config/ManageConfigUseCase.php - Namespace: UseCases\Config
- Zeilen: 186 | Größe: 5,418 Bytes
- Geändert: 2025-12-30 20:30:51 | Gescannt: 2025-12-31 10:22:15
Code Hygiene Score: 94
- Dependencies: 100 (25%)
- LOC: 82 (20%)
- Methods: 90 (20%)
- Secrets: 100 (15%)
- Classes: 100 (10%)
- Magic Numbers: 100 (10%)
Keine Issues gefunden.
Dependencies 2
- constructor Infrastructure\Persistence\ContentConfigRepository
- use Infrastructure\Persistence\ContentConfigRepository
Klassen 1
-
ManageConfigUseCaseclass Zeile 11
Funktionen 11
-
__construct()public Zeile 16 -
getAll()public Zeile 21 -
getById()public Zeile 32 -
create()public Zeile 39 -
update()public Zeile 83 -
delete()public Zeile 138 -
getChildren()public Zeile 155 -
getHistory()public Zeile 160 -
getParentOptions()public Zeile 165 -
getStatistics()public Zeile 170 -
isValidJson()private Zeile 175
Verwendet von 4
- ConfigController.php use
- ConfigController.php constructor
- ConfigController.php use
- ConfigController.php constructor
Versionen 5
-
v5
2025-12-30 20:30 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation -
v4
2025-12-30 20:30 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation -
v3
2025-12-30 20:29 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation -
v2
2025-12-23 08:17 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation -
v1
2025-12-23 07:55 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation
Code
<?php
declare(strict_types=1);
namespace UseCases\Config;
// @responsibility: Verwaltet Content-Konfigurationen (Profile, Strukturen, Contracts)
use Infrastructure\Persistence\ContentConfigRepository;
final class ManageConfigUseCase
{
private const VALID_TYPES = ['author_profile', 'structure', 'organization', 'contract', 'rule', 'system_prompt', 'critic'];
private const VALID_STATUSES = ['draft', 'active', 'deprecated'];
public function __construct(
private ContentConfigRepository $configRepo
) {
}
public function getAll(?string $type = null, ?string $status = null): array
{
$validType = in_array($type, self::VALID_TYPES, true) ? $type : null;
$validStatus = in_array($status, self::VALID_STATUSES, true) ? $status : null;
return array_map(
fn (array $row) => ConfigDTO::fromArray($row),
$this->configRepo->findAll($validType, $validStatus)
);
}
public function getById(int $id): ?ConfigDTO
{
$data = $this->configRepo->findById($id);
return $data !== null ? ConfigDTO::fromArray($data) : null;
}
public function create(
string $type,
string $name,
string $slug,
?string $description,
string $content,
string $version,
string $status,
?int $parentId,
?int $promptId = null,
int $sortOrder = 0
): ConfigResult {
$name = trim($name);
$slug = trim($slug);
$description = $description !== null ? trim($description) : null;
if (!in_array($type, self::VALID_TYPES, true)) {
return ConfigResult::error('Ungültiger Konfigurationstyp.');
}
if ($name === '' || $slug === '') {
return ConfigResult::error('Name und Slug sind erforderlich.');
}
if (!$this->isValidJson($content)) {
return ConfigResult::error('Ungültiges JSON-Format.');
}
$id = $this->configRepo->create(
$type,
$name,
$slug,
$description !== '' ? $description : null,
$content,
trim($version) ?: '1.0',
in_array($status, self::VALID_STATUSES, true) ? $status : 'draft',
$parentId,
$promptId,
$sortOrder
);
return ConfigResult::success($id, 'Konfiguration erfolgreich erstellt.');
}
public function update(
int $id,
string $name,
string $slug,
?string $description,
string $content,
string $newVersion,
string $changeDescription,
string $status,
?int $parentId,
?int $promptId = null,
int $sortOrder = 0
): ConfigResult {
$name = trim($name);
$slug = trim($slug);
$newVersion = trim($newVersion);
$description = $description !== null ? trim($description) : null;
$existing = $this->configRepo->findById($id);
if ($existing === null) {
return ConfigResult::error('Konfiguration nicht gefunden.');
}
if ($name === '' || $slug === '' || $newVersion === '') {
return ConfigResult::error('Name, Slug und neue Version sind erforderlich.');
}
if (!$this->isValidJson($content)) {
return ConfigResult::error('Ungültiges JSON-Format.');
}
$this->configRepo->saveHistory(
$id,
$existing['content'],
$existing['version'],
'web-ui',
$changeDescription !== '' ? $changeDescription : 'Update auf Version ' . $newVersion
);
$this->configRepo->update(
$id,
$name,
$slug,
$description !== '' ? $description : null,
$content,
$newVersion,
in_array($status, self::VALID_STATUSES, true) ? $status : $existing['status'],
$parentId,
$promptId,
$sortOrder
);
return ConfigResult::success($id, 'Konfiguration auf Version ' . $newVersion . ' aktualisiert.');
}
public function delete(int $id): ConfigResult
{
$existing = $this->configRepo->findById($id);
if ($existing === null) {
return ConfigResult::error('Konfiguration nicht gefunden.');
}
if ($this->configRepo->countChildren($id) > 0) {
return ConfigResult::error('Kann nicht gelöscht werden: Es existieren verknüpfte Einträge.');
}
$this->configRepo->deleteHistory($id);
$this->configRepo->delete($id);
return ConfigResult::success($id, 'Konfiguration gelöscht.');
}
public function getChildren(int $id): array
{
return $this->configRepo->getChildren($id);
}
public function getHistory(int $id): array
{
return $this->configRepo->getHistory($id);
}
public function getParentOptions(?int $excludeId = null): array
{
return $this->configRepo->getParentOptions($excludeId);
}
public function getStatistics(): array
{
return $this->configRepo->getStatistics();
}
private function isValidJson(string $content): bool
{
if ($content === 'null') {
return true;
}
json_decode($content, true);
return json_last_error() === JSON_ERROR_NONE;
}
}