use async_trait::async_trait;
use modkit_db::secure::DBRunner;
use modkit_macros::domain_model;
use modkit_security::AccessScope;
use time::OffsetDateTime;
use uuid::Uuid;
use crate::domain::error::DomainError;
#[domain_model]
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct SummaryFrontier {
pub created_at: OffsetDateTime,
pub message_id: Uuid,
}
#[domain_model]
#[derive(Debug, Clone)]
pub struct ThreadSummaryModel {
pub content: String,
pub frontier: SummaryFrontier,
pub token_estimate: i32,
}
#[async_trait]
pub trait ThreadSummaryRepository: Send + Sync {
async fn get_latest<C: DBRunner>(
&self,
runner: &C,
scope: &AccessScope,
chat_id: Uuid,
) -> Result<Option<ThreadSummaryModel>, DomainError>;
#[allow(clippy::too_many_arguments)]
async fn upsert_with_cas<C: DBRunner>(
&self,
runner: &C,
chat_id: Uuid,
tenant_id: Uuid,
expected_base_frontier: Option<&SummaryFrontier>,
new_frontier: &SummaryFrontier,
summary_text: &str,
token_estimate: i32,
) -> Result<u64, DomainError>;
}