use docbox_database::models::{document_box::DocumentBoxScopeRaw, folder::FolderId, user::UserId};
use serde::{Deserialize, Serialize};
use serde_with::skip_serializing_none;
use uuid::Uuid;
use crate::models::{DocumentPage, SearchIndexType};
#[derive(Debug, Serialize, Deserialize)]
pub struct OsSearchIndexData {
#[serde(rename = "item_type")]
pub ty: SearchIndexType,
pub folder_id: FolderId,
pub document_box: DocumentBoxScopeRaw,
pub item_id: Uuid,
pub name: String,
pub mime: Option<String>,
pub content: Option<String>,
pub created_at: String,
pub created_by: Option<UserId>,
pub pages: Option<Vec<DocumentPage>>,
}
#[skip_serializing_none]
#[derive(Debug, Serialize, Deserialize)]
pub struct OsUpdateSearchIndexData {
pub folder_id: FolderId,
pub name: String,
pub content: Option<String>,
pub pages: Option<Vec<DocumentPage>>,
}
#[derive(Debug, Deserialize)]
pub struct SearchResponse {
pub hits: Hits<SearchResponseHit>,
}
#[derive(Debug, Deserialize)]
pub struct Hits<H> {
pub total: HitsTotal,
pub hits: Vec<H>,
}
#[derive(Debug, Deserialize)]
pub struct HitsTotal {
pub value: u64,
}
#[derive(Debug, Deserialize)]
pub struct SearchResponseHit {
pub _id: String,
pub _score: f32,
pub _source: SearchResponseHitSource,
pub inner_hits: Option<InnerHits>,
pub matched_queries: Option<Vec<String>>,
}
#[derive(Debug, Deserialize)]
pub struct SearchResponseHitSource {
pub item_id: Uuid,
pub item_type: SearchIndexType,
pub document_box: DocumentBoxScopeRaw,
}
#[derive(Debug, Deserialize)]
pub struct InnerHits {
pub pages: InnerHitsPages,
}
#[derive(Debug, Deserialize)]
pub struct InnerHitsPages {
pub hits: Hits<PagesHit>,
}
#[derive(Debug, Deserialize)]
pub struct PagesHit {
pub _score: f32,
pub _source: PagesHitSource,
pub highlight: PagesHighlight,
}
#[derive(Debug, Deserialize)]
pub struct PagesHitSource {
pub page: u64,
}
#[derive(Debug, Deserialize)]
pub struct PagesHighlight {
#[serde(rename = "pages.content")]
pub content: Vec<String>,
}