1use chrono::{DateTime, Utc};
2use serde::{Deserialize, Serialize};
3use thiserror::Error;
4use uuid::Uuid;
5
6#[derive(Debug, Clone, Error)]
7pub enum DatabaseError {
8 #[error("Not found: {0}")]
9 NotFound(String),
10
11 #[error("Connection error: {0}")]
12 ConnectionError(String),
13
14 #[error("Query error: {0}")]
15 QueryError(String),
16
17 #[error("Unique violation: {0}")]
18 UniqueViolation(String),
19}
20
21#[derive(Debug, Clone, Serialize, Deserialize)]
22pub struct GraphNode {
23 pub id: Uuid,
24 pub slug: Uuid,
25 pub user_id: Uuid,
26 pub data_id: Uuid,
27 pub dataset_id: Uuid,
28 pub label: Option<String>,
29 pub node_type: String,
30 pub indexed_fields: serde_json::Value,
31 pub attributes: Option<serde_json::Value>,
32 pub created_at: DateTime<Utc>,
33}
34
35#[derive(Debug, Clone, Serialize, Deserialize)]
36pub struct GraphEdge {
37 pub id: Uuid,
38 pub slug: Uuid,
39 pub user_id: Uuid,
40 pub data_id: Uuid,
41 pub dataset_id: Uuid,
42 pub source_node_id: Uuid,
43 pub destination_node_id: Uuid,
44 pub relationship_name: String,
45 pub label: Option<String>,
46 pub attributes: Option<serde_json::Value>,
47 pub created_at: DateTime<Utc>,
48}
49
50#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
51pub enum PipelineRunStatus {
52 Initiated,
53 Started,
54 Completed,
55 Errored,
56}
57
58#[derive(Debug, Clone, Serialize, Deserialize)]
59pub struct PipelineRun {
60 pub id: Uuid,
61 pub created_at: DateTime<Utc>,
62 pub status: PipelineRunStatus,
63 pub pipeline_run_id: Uuid,
64 pub pipeline_name: String,
65 pub pipeline_id: Uuid,
66 pub dataset_id: Option<Uuid>,
67 pub run_info: Option<serde_json::Value>,
68}
69
70#[derive(Debug, Clone, Serialize, Deserialize)]
71pub struct TaskRun {
72 pub id: Uuid,
73 pub task_name: String,
74 pub created_at: DateTime<Utc>,
75 pub status: String,
76 pub run_info: Option<serde_json::Value>,
77}
78
79#[derive(Debug, Clone, Serialize, Deserialize)]
80pub struct GraphMetrics {
81 pub id: Uuid,
82 pub num_tokens: Option<i32>,
83 pub num_nodes: Option<i32>,
84 pub num_edges: Option<i32>,
85 pub mean_degree: Option<f64>,
86 pub edge_density: Option<f64>,
87 pub num_connected_components: Option<i32>,
88 pub sizes_of_connected_components: Option<serde_json::Value>,
89 pub num_selfloops: Option<i32>,
90 pub diameter: Option<i32>,
91 pub avg_shortest_path_length: Option<f64>,
92 pub avg_clustering: Option<f64>,
93 pub created_at: DateTime<Utc>,
94 pub updated_at: Option<DateTime<Utc>>,
95}
96
97#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
98pub enum SearchHistoryEntryType {
99 Query,
100 Result,
101}
102
103#[derive(Debug, Clone, Serialize, Deserialize)]
104pub struct SearchHistoryEntry {
105 pub entry_id: Uuid,
106 pub query_id: Uuid,
107 pub entry_type: SearchHistoryEntryType,
108 pub content: String,
109 pub query_type: Option<String>,
110 pub user_id: Option<Uuid>,
111 pub created_at: DateTime<Utc>,
112}