Skip to main content

context69_contracts/
sources.rs

1use 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}