<?php
declare(strict_types=1);
namespace Domain\Repository;
// @responsibility: Vertrag für Chat-Session-Persistenz
use Domain\Entity\ChatSession;
interface ChatSessionRepositoryInterface
{
/**
* Find session by UUID.
*/
public function findByUuid(string $uuid): ?ChatSession;
/**
* Get all sessions with statistics.
*
* @return array<int, ChatSession>
*/
public function findAll(int $limit = 50): array;
/**
* Get all sessions as arrays (for list views with aggregated data).
*
* @return array<int, array<string, mixed>>
*/
public function findAllWithStats(int $limit = 50): array;
/**
* Save a session (create or update).
*/
public function save(ChatSession $session): int;
/**
* Create a new session (legacy - use save() instead).
*
* @deprecated Use save() with ChatSession entity
*/
public function create(string $uuid, string $model, string $collections, int $contextLimit): int;
/**
* Update session title.
*/
public function updateTitle(int $sessionId, string $title): void;
/**
* Update session settings.
*
* @param array<string> $collections
*/
public function updateSettings(
int $sessionId,
string $model,
array $collections,
int $contextLimit,
?int $authorProfileId,
float $temperature,
int $maxTokens
): void;
/**
* Update system prompt.
*/
public function updateSystemPrompt(int $sessionId, ?string $systemPrompt): void;
/**
* Delete session by ID.
*/
public function delete(int $sessionId): void;
/**
* Touch session (update last_activity timestamp).
*/
public function touch(int $sessionId): void;
/**
* Generate UUID v4.
*/
public function generateUuid(): string;
}