use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use sqlx::FromRow;
#[derive(Debug, Clone, FromRow)]
pub struct KeychainEntry {
pub cache_key: String,
pub catalog_id: i64,
pub keychain_name: String,
pub scope_type: String,
#[sqlx(default)]
pub execution_id: Option<i64>,
pub data_encrypted: String,
#[sqlx(default)]
pub expires_at: Option<DateTime<Utc>>,
#[sqlx(default)]
pub auto_renew: bool,
#[sqlx(default)]
pub renew_config: Option<serde_json::Value>,
#[sqlx(default)]
pub access_count: i32,
#[sqlx(default)]
pub accessed_at: Option<DateTime<Utc>>,
pub created_at: DateTime<Utc>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct KeychainSetRequest {
pub data: serde_json::Value,
#[serde(default = "default_scope")]
pub scope_type: String,
#[serde(default)]
pub execution_id: Option<i64>,
#[serde(default)]
pub expires_at: Option<DateTime<Utc>>,
#[serde(default)]
pub expires_in: Option<i64>,
#[serde(default)]
pub auto_renew: bool,
#[serde(default)]
pub renew_config: Option<serde_json::Value>,
}
fn default_scope() -> String {
"global".to_string()
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct KeychainSetResponse {
pub status: String,
pub cache_key: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub expires_at: Option<DateTime<Utc>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct KeychainGetResponse {
pub status: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub data: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub expires_at: Option<DateTime<Utc>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub auto_renew: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub access_count: Option<i32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct KeychainDeleteResponse {
pub status: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub cache_key: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct KeychainListResponse {
pub catalog_id: String,
pub entries: Vec<KeychainEntrySummary>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct KeychainEntrySummary {
pub keychain_name: String,
pub scope_type: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub execution_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub expires_at: Option<DateTime<Utc>>,
pub expired: bool,
pub access_count: i32,
#[serde(skip_serializing_if = "Option::is_none")]
pub accessed_at: Option<DateTime<Utc>>,
pub created_at: DateTime<Utc>,
}