<?php
declare(strict_types=1);
namespace UseCases\Chat;
// @responsibility: Datenübertragungsobjekt für Chat-Sessions
use Domain\Entity\ChatMessage;
use Domain\Entity\ChatSession;
final class ChatSessionDTO
{
private ChatSession $session;
/** @var array<int, ChatMessage> */
private array $messages;
/**
* @param ChatSession $session Session entity
* @param array<int, ChatMessage> $messages Messages for this session
*/
public function __construct(
ChatSession $session,
array $messages = [],
) {
$this->session = $session;
$this->messages = $messages;
}
public function getSession(): ChatSession
{
return $this->session;
}
public function getId(): int
{
return $this->session->getId() ?? 0;
}
public function getUuid(): string
{
return $this->session->getUuid();
}
public function getTitle(): ?string
{
return $this->session->getTitle();
}
public function getModel(): string
{
return $this->session->getModel();
}
/**
* @return array<string>
*/
public function getCollections(): array
{
return $this->session->getCollections();
}
public function getContextLimit(): int
{
return $this->session->getContextLimit();
}
public function getAuthorProfileId(): int
{
return $this->session->getAuthorProfileId() ?? 0;
}
public function getSystemPromptId(): int
{
return $this->session->getSystemPromptId() ?? 1;
}
public function getTemperature(): float
{
return $this->session->getTemperature();
}
public function getMaxTokens(): int
{
return $this->session->getMaxTokens();
}
/**
* @return array<int, ChatMessage>
*/
public function getMessages(): array
{
return $this->messages;
}
/**
* Get messages as arrays for views.
*
* @return array<int, array<string, mixed>>
*/
public function getMessagesAsArrays(): array
{
return array_map(fn (ChatMessage $m) => $m->toArray(), $this->messages);
}
public function getMessageCount(): int
{
return count($this->messages);
}
/**
* Get session as array for views.
*
* @return array<string, mixed>
*/
public function toArray(): array
{
return $this->session->toArray();
}
/**
* Check if session exists
*/
public function exists(): bool
{
return $this->getId() > 0;
}
}