use std::sync::Arc;
use async_trait::async_trait;
use crate::domain::error::ChatEngineError;
use crate::domain::search::Cursor;
use crate::domain::service::search_service::{
BackendHit, ParsedQuery, SearchBackend, SearchScopeFilter,
};
use crate::infra::db::repo::ChatEngineDb;
pub struct PgSearchBackend {
#[allow(dead_code)]
db: Arc<ChatEngineDb>,
}
impl PgSearchBackend {
#[must_use]
pub fn new(db: Arc<ChatEngineDb>) -> Self {
Self { db }
}
}
#[async_trait]
impl SearchBackend for PgSearchBackend {
async fn search(
&self,
_scope: &SearchScopeFilter,
_query: &ParsedQuery,
_cursor: Option<&Cursor>,
_skip: u32,
_limit: u32,
) -> std::result::Result<(Vec<BackendHit>, u64), ChatEngineError> {
Err(ChatEngineError::not_implemented(
"PgSearchBackend not yet wired to DBProvider \u{2014} Phase 15 owns workspace wiring",
))
}
}
pub struct SqliteSearchBackend {
#[allow(dead_code)]
db: Arc<ChatEngineDb>,
}
impl SqliteSearchBackend {
#[must_use]
pub fn new(db: Arc<ChatEngineDb>) -> Self {
Self { db }
}
}
#[async_trait]
impl SearchBackend for SqliteSearchBackend {
async fn search(
&self,
_scope: &SearchScopeFilter,
_query: &ParsedQuery,
_cursor: Option<&Cursor>,
_skip: u32,
_limit: u32,
) -> std::result::Result<(Vec<BackendHit>, u64), ChatEngineError> {
Err(ChatEngineError::not_implemented(
"SqliteSearchBackend not yet wired to DBProvider \u{2014} Phase 15 owns workspace wiring",
))
}
}
#[derive(Debug, Default, Clone, Copy)]
pub struct NotImplementedSearchBackend;
impl NotImplementedSearchBackend {
#[must_use]
pub fn new() -> Self {
Self
}
}
#[async_trait]
impl SearchBackend for NotImplementedSearchBackend {
async fn search(
&self,
_scope: &SearchScopeFilter,
_query: &ParsedQuery,
_cursor: Option<&Cursor>,
_skip: u32,
_limit: u32,
) -> std::result::Result<(Vec<BackendHit>, u64), ChatEngineError> {
Err(ChatEngineError::not_implemented(
"message search backend is not configured",
))
}
}