Skip to main content

xz_knowledge_graph/types/
query.rs

1use serde::{Deserialize, Serialize};
2
3use super::confidence::Confidence;
4use super::entity::{Entity, EntityType};
5
6/// Entity search query.
7#[derive(Debug, Clone, Serialize, Deserialize, Default)]
8pub struct EntityQuery {
9    pub name_contains: Option<String>,
10    pub alias_contains: Option<String>,
11    pub entity_types: Option<Vec<EntityType>>,
12    pub attribute_filters: Vec<AttributeFilter>,
13    pub tags: Option<TagFilter>,
14    pub min_confidence: Option<Confidence>,
15    pub source: Option<String>,
16    pub page: PageRequest,
17    pub sort_by: Option<EntitySortField>,
18}
19
20/// Attribute filter condition.
21#[derive(Debug, Clone, Serialize, Deserialize)]
22pub struct AttributeFilter {
23    pub key: String,
24    pub operator: FilterOperator,
25    pub value: String,
26}
27
28#[derive(Debug, Clone, Serialize, Deserialize)]
29pub enum FilterOperator {
30    Eq,
31    Ne,
32    Contains,
33    StartsWith,
34    EndsWith,
35    Gt,
36    Lt,
37    Gte,
38    Lte,
39}
40
41/// Tag filter with AND/OR mode.
42#[derive(Debug, Clone, Serialize, Deserialize)]
43pub struct TagFilter {
44    pub tags: Vec<String>,
45    pub mode: TagFilterMode,
46}
47
48#[derive(Debug, Clone, Serialize, Deserialize)]
49pub enum TagFilterMode {
50    And,
51    Or,
52}
53
54/// Pagination request.
55#[derive(Debug, Clone, Serialize, Deserialize)]
56pub struct PageRequest {
57    pub limit: usize,
58    pub offset: usize,
59}
60
61impl Default for PageRequest {
62    fn default() -> Self {
63        Self { limit: 50, offset: 0 }
64    }
65}
66
67/// Paginated entity results.
68#[derive(Debug, Clone, Serialize, Deserialize)]
69pub struct EntityPage {
70    pub items: Vec<Entity>,
71    pub total: usize,
72    pub has_more: bool,
73}
74
75/// Entity sort field.
76#[derive(Debug, Clone, Serialize, Deserialize)]
77pub enum EntitySortField {
78    Name,
79    CreatedAt,
80    UpdatedAt,
81    EntityType,
82    RelationCount,
83}
84
85/// Relation query.
86#[derive(Debug, Clone, Serialize, Deserialize, Default)]
87pub struct RelationQuery {
88    pub source_id: Option<String>,
89    pub target_id: Option<String>,
90    pub entity_id: Option<String>,
91    pub relation_type: Option<String>,
92    pub relation_types: Option<Vec<String>>,
93    pub min_confidence: Option<Confidence>,
94    pub valid_at: Option<u64>,
95    pub page: PageRequest,
96}