Two teams try and fill in any horizontal, vertical, or diagonal line on a bingo board by playing maps on osu!
osu.bingo
osu
1use std::sync::Arc;
2
3use axum::{Extension, Router, routing::get};
4use juniper_axum::{extract::JuniperRequest, graphiql, response::JuniperResponse};
5
6use crate::{
7 database::{DataContext, pool},
8 schema,
9};
10
11async fn sdl(Extension(schema): Extension<Arc<schema::Schema>>) -> axum::response::Response {
12 axum::response::Response::new(schema.as_sdl().into())
13}
14
15async fn handle_graphql(
16 Extension(schema): Extension<Arc<schema::Schema>>,
17 Extension(context): Extension<schema::Context>,
18 JuniperRequest(request): JuniperRequest,
19) -> JuniperResponse {
20 let loader = DataContext::new(context.pool.clone());
21 JuniperResponse(request.execute(&*schema, &loader).await)
22}
23
24pub async fn router() -> Router {
25 let state = schema::Context { pool: pool().await };
26
27 Router::new()
28 .route("/schema", get(sdl))
29 .route("/graphql", get(handle_graphql).post(handle_graphql))
30 .route("/", get(graphiql("/graphql", "/subscriptions")))
31 .layer(Extension(Arc::new(schema::create_schema())))
32 .layer(Extension(state))
33}