1
0
mirror of https://github.com/actix/examples synced 2024-11-24 23:02:59 +01:00
examples/graphql/juniper-advanced/src/handlers.rs

40 lines
1.1 KiB
Rust
Raw Normal View History

2019-12-07 18:59:24 +01:00
use actix_web::{web, Error, HttpResponse};
use juniper::http::graphiql::graphiql_source;
use juniper::http::GraphQLRequest;
use crate::db::Pool;
2019-12-07 18:59:24 +01:00
use crate::schemas::root::{create_schema, Context, Schema};
2019-12-07 18:59:24 +01:00
pub async fn graphql(
pool: web::Data<Pool>,
schema: web::Data<Schema>,
data: web::Json<GraphQLRequest>,
2019-12-07 18:59:24 +01:00
) -> Result<HttpResponse, Error> {
let ctx = Context {
dbpool: pool.get_ref().to_owned(),
};
2019-12-07 18:59:24 +01:00
let res = web::block(move || {
2021-04-26 13:32:32 +02:00
let res = data.execute_sync(&schema, &ctx);
2021-10-07 04:04:59 +02:00
serde_json::to_string(&res)
})
2019-12-07 18:59:24 +01:00
.await
.map_err(Error::from)?;
Ok(HttpResponse::Ok()
.content_type("application/json")
.body(res))
}
2019-12-07 18:59:24 +01:00
pub async fn graphql_playground() -> HttpResponse {
HttpResponse::Ok()
.content_type("text/html; charset=utf-8")
2021-04-26 13:32:32 +02:00
.body(graphiql_source("/graphql", None))
}
pub fn register(config: &mut web::ServiceConfig) {
config
.data(create_schema())
2019-12-07 18:59:24 +01:00
.route("/graphql", web::post().to(graphql))
.route("/graphiql", web::get().to(graphql_playground));
2019-12-07 18:59:24 +01:00
}