use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use sqlx::FromRow;
#[derive(Debug, Clone, Serialize, Deserialize, FromRow)]
pub struct CatalogEntry {
pub id: i64,
pub path: String,
pub kind: String,
pub version: i16,
pub content: String,
#[sqlx(default)]
pub layout: Option<serde_json::Value>,
#[sqlx(default)]
pub payload: Option<serde_json::Value>,
#[sqlx(default)]
pub meta: Option<serde_json::Value>,
pub created_at: DateTime<Utc>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CatalogRegisterRequest {
pub content: String,
#[serde(default = "default_resource_type")]
pub resource_type: String,
}
fn default_resource_type() -> String {
"Playbook".to_string()
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CatalogRegisterResponse {
pub status: String,
pub message: String,
pub path: String,
pub version: i16,
pub catalog_id: String,
pub kind: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct CatalogEntriesRequest {
#[serde(default)]
pub resource_type: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CatalogEntries {
pub entries: Vec<CatalogEntryResponse>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CatalogEntryResponse {
pub catalog_id: String,
pub path: String,
pub kind: String,
pub version: i16,
pub content: Option<String>,
pub layout: Option<serde_json::Value>,
pub payload: Option<serde_json::Value>,
pub meta: Option<serde_json::Value>,
pub created_at: DateTime<Utc>,
}
impl From<CatalogEntry> for CatalogEntryResponse {
fn from(entry: CatalogEntry) -> Self {
Self {
catalog_id: entry.id.to_string(),
path: entry.path,
kind: entry.kind,
version: entry.version,
content: Some(entry.content),
layout: entry.layout,
payload: entry.payload,
meta: entry.meta,
created_at: entry.created_at,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct CatalogEntryRequest {
#[serde(default)]
pub catalog_id: Option<String>,
#[serde(default)]
pub path: Option<String>,
#[serde(default)]
pub version: Option<String>,
}