Skip to main content
Glama
create_variant.rs2.52 kB
use axum::{ Json, extract::{ Host, OriginalUri, }, }; use dal::{ ChangeSet, WsEvent, schema::variant::authoring::VariantAuthoringClient, }; use sdf_core::{ force_change_set_response::ForceChangeSetResponse, tracking::track, }; use sdf_extract::{ HandlerContext, PosthogClient, v1::AccessBuilder, }; use serde::{ Deserialize, Serialize, }; use si_db::Visibility; use si_events::audit_log::AuditLogKind; use si_frontend_types::SchemaVariant as FrontendVariant; use crate::SchemaVariantResult; #[derive(Deserialize, Serialize, Debug)] #[serde(rename_all = "camelCase")] pub struct CreateVariantRequest { pub name: String, pub color: String, #[serde(flatten)] pub visibility: Visibility, } pub async fn create_variant( HandlerContext(builder): HandlerContext, AccessBuilder(request_ctx): AccessBuilder, PosthogClient(posthog_client): PosthogClient, OriginalUri(original_uri): OriginalUri, Host(host_name): Host, Json(request): Json<CreateVariantRequest>, ) -> SchemaVariantResult<ForceChangeSetResponse<FrontendVariant>> { let mut ctx = builder.build(request_ctx.build(request.visibility)).await?; let force_change_set_id = ChangeSet::force_new(&mut ctx).await?; let created_schema_variant = VariantAuthoringClient::create_schema_and_variant( &ctx, request.name.clone(), None::<String>, None::<String>, "".to_string(), request.color.clone(), ) .await?; let schema = created_schema_variant.schema(&ctx).await?; track( &posthog_client, &ctx, &original_uri, &host_name, "create_variant", serde_json::json!({ "variant_name": request.name.clone(), "variant_id": created_schema_variant.id().clone(), "schema_id": schema.id(), }), ); WsEvent::schema_variant_created(&ctx, schema.id(), created_schema_variant.clone()) .await? .publish_on_commit(&ctx) .await?; ctx.write_audit_log( AuditLogKind::CreateSchemaVariant { schema_id: schema.id(), schema_variant_id: created_schema_variant.id(), }, created_schema_variant.display_name().to_string(), ) .await?; ctx.commit().await?; let variant = created_schema_variant .into_frontend_type(&ctx, schema.id()) .await?; Ok(ForceChangeSetResponse::new(force_change_set_id, variant)) }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/systeminit/si'

If you have feedback or need assistance with the MCP directory API, please join our Discord server