context69_contracts/
sources.rs1use chrono::{DateTime, Utc};
2use schemars::JsonSchema;
3use serde::{Deserialize, Serialize};
4use utoipa::ToSchema;
5
6use crate::Visibility;
7
8#[derive(Debug, Clone, Serialize, Deserialize, ToSchema, JsonSchema)]
9#[serde(rename_all = "snake_case")]
10pub enum SourceOriginStatusKind {
11 Unknown,
12 Connected,
13 Unreachable,
14 Misconfigured,
15}
16
17#[derive(Debug, Clone, Serialize, Deserialize, ToSchema, JsonSchema)]
18pub struct SourceStatus {
19 pub group_key: String,
20 pub project_key: String,
21 pub visibility: Visibility,
22 pub source_key: String,
23 pub display_name: String,
24 #[serde(default, skip_serializing_if = "Option::is_none")]
25 pub description: Option<String>,
26 #[serde(default)]
27 pub example_queries: Vec<String>,
28 pub connection: String,
29 pub has_database_url: bool,
30 pub origin_status: SourceOriginStatusKind,
31 #[serde(default, skip_serializing_if = "Option::is_none")]
32 pub origin_message: Option<String>,
33 pub sync_strategy: String,
34 pub connector_type: String,
35 pub base_query: String,
36 pub batch_size: i64,
37 pub last_cursor_updated_at: Option<DateTime<Utc>>,
38 pub last_cursor_external_id: Option<String>,
39 pub last_success_at: Option<DateTime<Utc>>,
40}
41
42#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
43pub struct ListSourcesResponse {
44 pub sources: Vec<SourceStatus>,
45}
46
47#[derive(Debug, Clone, Serialize, Deserialize, ToSchema, JsonSchema)]
48pub struct SyncOutcome {
49 pub records_seen: usize,
50 pub records_changed: usize,
51 pub chunks_upserted: usize,
52}
53
54#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
55pub struct SourceConfigInput {
56 pub source_key: String,
57 #[serde(default, skip_serializing_if = "Option::is_none")]
58 pub display_name: Option<String>,
59 #[serde(default, skip_serializing_if = "Option::is_none")]
60 pub description: Option<String>,
61 #[serde(default)]
62 pub example_queries: Vec<String>,
63 pub connection: String,
64 #[serde(default, skip_serializing_if = "Option::is_none")]
65 pub database_url: Option<String>,
66 pub sync_strategy: String,
67 pub connector_type: String,
68 pub base_query: String,
69 pub batch_size: i64,
70 #[serde(default, skip_serializing_if = "Option::is_none")]
71 pub visibility: Option<Visibility>,
72}
73
74#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
75pub struct SourceConnectionResponse {
76 pub name: String,
77 pub has_database_url: bool,
78 pub origin_status: SourceOriginStatusKind,
79 #[serde(default, skip_serializing_if = "Option::is_none")]
80 pub origin_message: Option<String>,
81}
82
83#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
84pub struct UpsertSourceConnectionRequest {
85 pub name: String,
86 #[serde(default, skip_serializing_if = "Option::is_none")]
87 pub database_url: Option<String>,
88}