diff options
Diffstat (limited to 'lib/api-config/src/schema/create.rs')
| -rw-r--r-- | lib/api-config/src/schema/create.rs | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/lib/api-config/src/schema/create.rs b/lib/api-config/src/schema/create.rs index 5c91f64..de2d214 100644 --- a/lib/api-config/src/schema/create.rs +++ b/lib/api-config/src/schema/create.rs @@ -1,4 +1,8 @@ +use async_trait::async_trait; use serde::{Deserialize, Serialize}; +use warden_core::state::AppState; + +use crate::schema::{SchemaDriver, TransactionSchema}; #[derive(Deserialize, Serialize)] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] @@ -13,3 +17,31 @@ pub struct CreateSchema { #[serde(rename = "json_schema")] pub schema: serde_json::Value, } + +#[async_trait] +impl SchemaDriver for AppState { + async fn create_schema( + &self, + name: impl AsRef<str> + Send + Sync, + version: impl AsRef<str> + Send + Sync, + schema: &serde_json::Value, + ) -> Result<super::TransactionSchema, crate::ConfigurationError> { + sqlx::query_as!( + TransactionSchema, + "insert into transaction_schema (type, version, json_schema) values ($1, $2, $3) + returning + type as kind, + version, + json_schema as schema, + created_at, + updated_at + ", + name.as_ref(), + version.as_ref(), + sqlx::types::Json(&schema) as _ + ) + .fetch_one(&self.database) + .await + .map_err(|e| e.into()) + } +} |
