use axum::Json; use axum::extract::State; use axum::response::IntoResponse; use session::{Session, SessionUser}; use uuid::Uuid; use crate::errors::ApiError; use crate::graphql::{GitSchema, build_schema}; use crate::service::GitService; #[utoipa::path( post, path = "/graphql", tag = "graphql", request_body = String, responses( (status = 200, description = "graphql execution result") ) )] pub async fn graphql_post( State(_service): State, session: Session, schema: axum::extract::Extension, Json(mut request): Json, ) -> Result { request = request.data::>(session.uid()); let response = schema.execute(request).await; Ok(Json(response).into_response()) } #[utoipa::path( get, path = "/graphql", tag = "graphql", responses( (status = 200, description = "graphql execution result") ) )] pub async fn graphql_get( State(_service): State, schema: axum::extract::Extension, ) -> Result { let request = async_graphql::Request::new("{ __typename }"); let response = schema.execute(request).await; Ok(Json(response).into_response()) } #[allow(dead_code)] pub fn build_schema_for(service: GitService) -> GitSchema { build_schema(service.state) }