Backup #1436

ID1436
Dateipfad/var/www/dev.campus.systemische-tools.de/src/Domain/Factory/ChatSessionFactory.php
Version1
Typ modified
Größe2.7 KB
Hash81fd15a849e09621dba7909394f34ae64d9b41c7caf3884675ac594fc2b8d567
Datum2025-12-25 16:59:58
Geändert vonclaude-code-hook
GrundClaude 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

Herunterladen

← Zurück zur Übersicht