Backup #1436
| ID | 1436 |
| Dateipfad | /var/www/dev.campus.systemische-tools.de/src/Domain/Factory/ChatSessionFactory.php |
| Version | 1 |
| Typ |
modified |
| Größe | 2.7 KB |
| Hash | 81fd15a849e09621dba7909394f34ae64d9b41c7caf3884675ac594fc2b8d567 |
| Datum | 2025-12-25 16:59:58 |
| Geändert von | claude-code-hook |
| Grund | Claude Code Pre-Hook Backup vor Edit-Operation |
| Datei existiert |
Ja
|
Dateiinhalt
<?php
declare(strict_types=1);
namespace Domain\Factory;
// @responsibility: Erstellt ChatSession-Instanzen aus verschiedenen Quellen
use Domain\Entity\ChatSession;
use Domain\ValueObject\SessionMetadata;
use Domain\ValueObject\SessionUuid;
final class ChatSessionFactory
{
/**
* Erstelle neue Session mit Defaults.
*/
public static function createNew(
?SessionUuid $uuid = null,
?SessionMetadata $metadata = null
): ChatSession {
return new ChatSession(
uuid: $uuid ?? SessionUuid::generate(),
metadata: $metadata ?? SessionMetadata::create()
);
}
/**
* Erstelle Session aus Datenbank-Row.
*
* @param array<string, mixed> $data
*/
public static function fromArray(array $data): ChatSession
{
$collections = self::parseCollections($data['collections'] ?? '["documents"]');
$metadata = SessionMetadata::create(
model: $data['model'] ?? 'claude-opus-4-5-20251101',
collections: $collections,
contextLimit: (int) ($data['context_limit'] ?? 5),
temperature: (float) ($data['temperature'] ?? 0.7),
maxTokens: (int) ($data['max_tokens'] ?? 4096)
);
$session = new ChatSession(
uuid: SessionUuid::fromString($data['uuid']),
metadata: $metadata,
id: isset($data['id']) ? (int) $data['id'] : null,
sessionToken: $data['session_token'] ?? null,
userId: isset($data['user_id']) ? (int) $data['user_id'] : null,
personaId: isset($data['persona_id']) ? (int) $data['persona_id'] : null,
title: $data['title'] ?? null,
authorProfileId: isset($data['author_profile_id']) ? (int) $data['author_profile_id'] : null,
systemPromptId: isset($data['system_prompt_id']) ? (int) $data['system_prompt_id'] : null,
createdAt: isset($data['created_at']) ? new \DateTimeImmutable($data['created_at']) : new \DateTimeImmutable(),
updatedAt: isset($data['updated_at']) ? new \DateTimeImmutable($data['updated_at']) : new \DateTimeImmutable(),
lastActivity: isset($data['last_activity']) ? new \DateTimeImmutable($data['last_activity']) : new \DateTimeImmutable()
);
return $session;
}
/**
* Parse collections from JSON string or array.
*
* @return array<string>
*/
private static function parseCollections(mixed $collections): array
{
if (is_string($collections)) {
$decoded = json_decode($collections, true);
return is_array($decoded) ? $decoded : ['documents'];
}
if (is_array($collections)) {
return $collections;
}
return ['documents'];
}
}
Vollständig herunterladen
Aktionen
← Zurück zur Übersicht