aboutsummaryrefslogtreecommitdiffstats
path: root/lib/api-config/src/schema/create.rs
diff options
context:
space:
mode:
Diffstat (limited to 'lib/api-config/src/schema/create.rs')
-rw-r--r--lib/api-config/src/schema/create.rs32
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())
+ }
+}