Allow uploading ensembles

This commit is contained in:
Elias Projahn 2020-11-28 22:23:35 +01:00
parent cb2a23606a
commit 13910a664c
11 changed files with 606 additions and 177 deletions

View file

@ -31,6 +31,10 @@ async fn main() -> std::io::Result<()> {
.service(update_person)
.service(get_persons)
.service(delete_person)
.service(get_ensemble)
.service(update_ensemble)
.service(delete_ensemble)
.service(get_ensembles)
});
server.bind("127.0.0.1:8087")?.run().await

View file

@ -0,0 +1,71 @@
use super::authenticate;
use crate::database;
use crate::database::{DbPool, Ensemble};
use crate::error::ServerError;
use actix_web::{delete, get, post, web, HttpResponse};
use actix_web_httpauth::extractors::bearer::BearerAuth;
/// Get an existing ensemble.
#[get("/ensembles/{id}")]
pub async fn get_ensemble(
db: web::Data<DbPool>,
id: web::Path<String>,
) -> Result<HttpResponse, ServerError> {
let data = web::block(move || {
let conn = db.into_inner().get()?;
database::get_ensemble(&conn, &id.into_inner())?.ok_or(ServerError::NotFound)
})
.await?;
Ok(HttpResponse::Ok().json(data))
}
/// Add a new ensemble or update an existin one. The user must be authorized to do that.
#[post("/ensembles")]
pub async fn update_ensemble(
auth: BearerAuth,
db: web::Data<DbPool>,
data: web::Json<Ensemble>,
) -> Result<HttpResponse, ServerError> {
web::block(move || {
let conn = db.into_inner().get()?;
let user = authenticate(&conn, auth.token()).or(Err(ServerError::Unauthorized))?;
database::update_ensemble(&conn, &data.into_inner(), &user)?;
Ok(())
})
.await?;
Ok(HttpResponse::Ok().finish())
}
#[get("/ensembles")]
pub async fn get_ensembles(db: web::Data<DbPool>) -> Result<HttpResponse, ServerError> {
let data = web::block(move || {
let conn = db.into_inner().get()?;
Ok(database::get_ensembles(&conn)?)
})
.await?;
Ok(HttpResponse::Ok().json(data))
}
#[delete("/ensembles/{id}")]
pub async fn delete_ensemble(
auth: BearerAuth,
db: web::Data<DbPool>,
id: web::Path<String>,
) -> Result<HttpResponse, ServerError> {
web::block(move || {
let conn = db.into_inner().get()?;
let user = authenticate(&conn, auth.token()).or(Err(ServerError::Unauthorized))?;
database::delete_ensemble(&conn, &id.into_inner(), &user)?;
Ok(())
})
.await?;
Ok(HttpResponse::Ok().finish())
}