xz_knowledge_graph/types/
query.rs1use serde::{Deserialize, Serialize};
2
3use super::confidence::Confidence;
4use super::entity::{Entity, EntityType};
5
6#[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#[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#[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#[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#[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#[derive(Debug, Clone, Serialize, Deserialize)]
77pub enum EntitySortField {
78 Name,
79 CreatedAt,
80 UpdatedAt,
81 EntityType,
82 RelationCount,
83}
84
85#[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}