diff options
Diffstat (limited to 'lib/api-config/src/schema')
| -rw-r--r-- | lib/api-config/src/schema/create.rs | 32 | ||||
| -rw-r--r-- | lib/api-config/src/schema/mod.rs | 12 |
2 files changed, 39 insertions, 5 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()) + } +} diff --git a/lib/api-config/src/schema/mod.rs b/lib/api-config/src/schema/mod.rs index 654e6ad..3893254 100644 --- a/lib/api-config/src/schema/mod.rs +++ b/lib/api-config/src/schema/mod.rs @@ -1,5 +1,6 @@ pub mod create; +use async_trait::async_trait; use serde::{Deserialize, Serialize}; use time::OffsetDateTime; @@ -23,11 +24,12 @@ pub struct TransactionSchema { pub updated_at: OffsetDateTime, } +#[async_trait] pub trait SchemaDriver { - fn create( + async fn create_schema( &self, - name: impl AsRef<str>, - version: impl AsRef<str>, - schema: serde_json::Value, - ) -> impl std::future::Future<Output = Result<TransactionSchema, ConfigurationError>> + Send + Sync; + name: impl AsRef<str> + Send + Sync, + version: impl AsRef<str> + Send + Sync, + schema: &serde_json::Value, + ) -> Result<TransactionSchema, ConfigurationError>; } |
