46 lines
1.1 KiB
Rust
46 lines
1.1 KiB
Rust
// 负责构建全文查询过滤排序分页和内容聚合逻辑
|
|
|
|
use serde::Serialize;
|
|
|
|
use crate::domain::{AvailabilityStatus, Heat};
|
|
|
|
#[derive(Debug, Clone, Default)]
|
|
pub struct SearchOptions {
|
|
pub query: String,
|
|
pub offset: usize,
|
|
pub limit: usize,
|
|
pub min_size: Option<u64>,
|
|
pub max_size: Option<u64>,
|
|
pub extension: Option<String>,
|
|
}
|
|
|
|
#[derive(Debug, Clone, PartialEq, Serialize)]
|
|
pub struct SearchHit {
|
|
pub info_hash: String,
|
|
pub name: String,
|
|
pub total_size: u64,
|
|
pub file_count: u64,
|
|
pub first_seen: u64,
|
|
pub last_seen: u64,
|
|
pub seen_count: u64,
|
|
pub content_key: String,
|
|
pub score: f32,
|
|
pub heat: Heat,
|
|
pub availability: AvailabilitySummary,
|
|
}
|
|
|
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
|
|
pub struct AvailabilitySummary {
|
|
pub status: AvailabilityStatus,
|
|
pub last_verified_at: Option<u64>,
|
|
pub reachable_peers: u32,
|
|
}
|
|
|
|
#[derive(Debug, Clone, PartialEq, Serialize)]
|
|
pub struct SearchPage {
|
|
pub total: usize,
|
|
pub offset: usize,
|
|
pub limit: usize,
|
|
pub hits: Vec<SearchHit>,
|
|
}
|