ChatMessageFactory.php
- Pfad:
src/Domain/Factory/ChatMessageFactory.php - Namespace: Domain\Factory
- Zeilen: 79 | Größe: 2,481 Bytes
- Geändert: 2025-12-25 16:56:44 | Gescannt: 2025-12-31 10:22:15
Code Hygiene Score: 98
- Dependencies: 90 (25%)
- LOC: 100 (20%)
- Methods: 100 (20%)
- Secrets: 100 (15%)
- Classes: 100 (10%)
- Magic Numbers: 100 (10%)
Keine Issues gefunden.
Dependencies 6
- use Domain\Entity\ChatMessage
- use Domain\ValueObject\MessageContent
- use Domain\ValueObject\MessageMetadata
- use Domain\ValueObject\MessageRole
- use Domain\ValueObject\MessageTiming
- use Domain\ValueObject\TokenCount
Klassen 1
-
ChatMessageFactoryclass Zeile 16
Funktionen 2
-
fromArray()public Zeile 23 -
decodeJson()private Zeile 68
Verwendet von 1
Code
<?php
declare(strict_types=1);
namespace Domain\Factory;
// @responsibility: Factory for creating ChatMessage entities with complex construction logic
use Domain\Entity\ChatMessage;
use Domain\ValueObject\MessageContent;
use Domain\ValueObject\MessageMetadata;
use Domain\ValueObject\MessageRole;
use Domain\ValueObject\MessageTiming;
use Domain\ValueObject\TokenCount;
final class ChatMessageFactory
{
/**
* Create from database row.
*
* @param array<string, mixed> $data
*/
public static function fromArray(array $data): ChatMessage
{
$content = MessageContent::fromStringOrEmpty($data['content']);
$role = MessageRole::from($data['role']);
$tokens = TokenCount::fromNullable(
isset($data['tokens_input']) ? (int) $data['tokens_input'] : null,
isset($data['tokens_output']) ? (int) $data['tokens_output'] : null
);
$timing = MessageTiming::create(
isset($data['start_microtime']) ? (float) $data['start_microtime'] : null,
isset($data['end_microtime']) ? (float) $data['end_microtime'] : null
);
$metadata = MessageMetadata::create(
self::decodeJson($data['sources'] ?? null),
self::decodeJson($data['collections'] ?? null),
self::decodeJson($data['chunks_used'] ?? null),
isset($data['context_limit']) ? (int) $data['context_limit'] : null
);
$createdAt = isset($data['created_at'])
? new \DateTimeImmutable($data['created_at'])
: new \DateTimeImmutable();
return ChatMessage::reconstituteFromPersistence(
isset($data['id']) ? (int) $data['id'] : null,
(int) $data['session_id'],
$role,
$content,
$data['model'] ?? null,
$tokens,
$timing,
$metadata,
isset($data['author_profile_id']) ? (int) $data['author_profile_id'] : null,
isset($data['system_prompt_id']) ? (int) $data['system_prompt_id'] : null,
isset($data['llm_request_id']) ? (int) $data['llm_request_id'] : null,
$createdAt
);
}
/**
* @return array<mixed>|null
*/
private static function decodeJson(?string $json): ?array
{
if ($json === null) {
return null;
}
$decoded = json_decode($json, true);
return is_array($decoded) ? $decoded : null;
}
}