ChatSessionFactory.php
- Pfad:
src/Domain/Factory/ChatSessionFactory.php - Namespace: Domain\Factory
- Zeilen: 110 | Größe: 3,967 Bytes
- Geändert: 2025-12-25 16:59:58 | Gescannt: 2025-12-31 10:22:15
Code Hygiene Score: 100
- Dependencies: 100 (25%)
- LOC: 100 (20%)
- Methods: 100 (20%)
- Secrets: 100 (15%)
- Classes: 100 (10%)
- Magic Numbers: 100 (10%)
Keine Issues gefunden.
Dependencies 3
- use Domain\Entity\ChatSession
- use Domain\ValueObject\SessionMetadata
- use Domain\ValueObject\SessionUuid
Klassen 1
-
ChatSessionFactoryclass Zeile 13
Funktionen 4
-
createNew()public Zeile 18 -
fromArray()public Zeile 33 -
parseCollections()private Zeile 68 -
toArray()public Zeile 88
Verwendet von 2
Versionen 1
-
v1
2025-12-25 16:59 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation
Code
<?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'];
}
/**
* Convert entity to array for persistence.
*
* @return array<string, mixed>
*/
public static function toArray(ChatSession $session): array
{
return [
'id' => $session->getId(),
'uuid' => $session->getUuid(),
'session_token' => $session->getSessionToken(),
'user_id' => $session->getUserId(),
'persona_id' => $session->getPersonaId(),
'title' => $session->getTitle(),
'model' => $session->getModel(),
'collections' => json_encode($session->getCollections()),
'context_limit' => $session->getContextLimit(),
'temperature' => $session->getTemperature(),
'max_tokens' => $session->getMaxTokens(),
'author_profile_id' => $session->getAuthorProfileId(),
'system_prompt_id' => $session->getSystemPromptId(),
'created_at' => $session->getCreatedAt()->format('Y-m-d H:i:s'),
'updated_at' => $session->getUpdatedAt()->format('Y-m-d H:i:s'),
'last_activity' => $session->getLastActivity()->format('Y-m-d H:i:s'),
];
}
}