starfish-api 0.1.1

StarfishQL - A graph database and query engine
Documentation
use rocket::serde::json::Json;
use rocket::{post, routes};
use sea_orm_rocket::Connection;
use starfish_core::lang::mutate::MutateJson;
use starfish_core::lang::query::{QueryJson, QueryResultJson};
use starfish_core::lang::schema::SchemaJson;
use starfish_core::mutate::Mutate;
use starfish_core::query::Query;

use crate::{check_auth_match, db::pool::Db, ErrorResponder};
use starfish_core::schema::Schema;

pub fn routes() -> Vec<rocket::Route> {
    routes![schema, mutate, query,]
}

#[post("/schema?<auth>", data = "<input_data>")]
async fn schema(
    conn: Connection<'_, Db>,
    input_data: Json<SchemaJson>,
    auth: Option<String>,
) -> Result<(), ErrorResponder> {
    check_auth_match(auth)?;

    let db = conn.into_inner();
    let schema_json = input_data.clone();

    Schema::define_schema(db, schema_json)
        .await
        .map_err(Into::into)?;

    Ok(())
}

#[post("/mutate?<auth>&<upsert>", data = "<input_data>")]
async fn mutate(
    conn: Connection<'_, Db>,
    input_data: Json<MutateJson>,
    auth: Option<String>,
    upsert: bool,
) -> Result<(), ErrorResponder> {
    check_auth_match(auth)?;

    let db = conn.into_inner();
    let mutate_json = input_data.clone();

    Mutate::mutate(db, mutate_json, upsert)
        .await
        .map_err(Into::into)?;

    Ok(())
}

#[post("/query", data = "<input_data>")]
async fn query(
    conn: Connection<'_, Db>,
    input_data: Json<QueryJson>,
) -> Result<Json<QueryResultJson>, ErrorResponder> {
    let db = conn.into_inner();
    let query_json = input_data.clone();

    Ok(Json(
        Query::query(db, query_json).await.map_err(Into::into)?,
    ))
}