use serde::{Deserialize, Serialize};
use whycodes_core::types::Usage;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SessionRow {
pub id: String,
pub title: String,
pub created_at: String,
pub updated_at: String,
pub project_path: String,
#[serde(default)]
pub usage: Usage,
}
#[derive(Debug, Clone)]
pub struct SessionTextHit {
pub session: SessionRow,
pub hits: usize,
pub sample: String,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct UsageTotals {
pub session_count: usize,
pub message_count: usize,
pub usage: Usage,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MessageRow {
pub id: String,
pub session_id: String,
pub role: String,
pub content: String,
pub tool_call_id: Option<String>,
pub name: Option<String>,
pub created_at: String,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct BranchRow {
pub name: Option<String>,
pub messages: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StateRow {
pub key: String,
pub value: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MemoryRow {
pub id: String,
pub project_key: String,
pub text: String,
pub embedding: Vec<u8>,
pub source_session: Option<String>,
pub created_at: String,
pub last_recalled_at: Option<String>,
pub recall_count: i64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CodeChunkRow {
pub id: String,
pub project_key: String,
pub path: String,
pub start_line: i64,
pub end_line: i64,
pub text: String,
pub embedding: Vec<u8>,
pub updated_at: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SessionChunkRow {
pub id: String,
pub project_key: String,
pub session_id: String,
pub turn_index: i64,
pub text: String,
pub embedding: Vec<u8>,
pub created_at: String,
}