diff --git a/lektord/src/app/routes.rs b/lektord/src/app/routes.rs index 694ce5d3c897bb00af03f80e78f81bdaa4eab74a..a3149088d9cd09a32cb56a6366f7863e87dc53a8 100644 --- a/lektord/src/app/routes.rs +++ b/lektord/src/app/routes.rs @@ -9,9 +9,11 @@ use crate::*; use anyhow::{anyhow, Error}; use axum::{ extract::{Path, State}, - http::StatusCode, + http::{HeaderValue, StatusCode}, + response::{IntoResponse, Response}, Json, }; +use hyper::header::CONTENT_TYPE; use lektor_nkdb::*; use lektor_payloads::*; use lektor_utils::{decode_base64_json, log}; @@ -105,11 +107,13 @@ pub(crate) async fn toggle_play_state() -> Result<(), LektordError> { pub(crate) async fn get_kara_by_id( State(state): State<LektorStatePtr>, Path(id): Path<u64>, -) -> Result<String, LektordError> { - Ok( - serde_json::to_string(state.database.get_kara_by_id(id).await?) - .map_err(|err| anyhow!("{err}"))?, - ) +) -> Result<Response, LektordError> { + let mut kara = serde_json::to_string(state.database.get_kara_by_id(id).await?) + .map_err(|err| anyhow!("{err}"))? + .into_response(); + kara.headers_mut() + .insert(CONTENT_TYPE, HeaderValue::from_static("application/json")); + Ok(kara) } /// Get all the informations about a kara by its id. Returns the kara as a json object to avoid @@ -118,14 +122,18 @@ pub(crate) async fn get_kara_by_id( pub(crate) async fn get_kara_by_kid( State(state): State<LektorStatePtr>, Path(id): Path<String>, -) -> Result<String, LektordError> { - match state.database.get_kid_from_str(&decode_base64(&id)?).await { - Some(id) => Ok( - serde_json::to_string(state.database.get_kara_by_kid(id).await?) - .map_err(|err| anyhow!("{err}"))?, - ), - None => Err(anyhow!("no kara found with id {id}").into()), - } +) -> Result<Response, LektordError> { + let id = state + .database + .get_kid_from_str(&decode_base64(&id)?) + .await + .ok_or_else(|| anyhow!("no kara found with id {id}"))?; + let mut kara = serde_json::to_string(state.database.get_kara_by_kid(id).await?) + .map_err(|err| anyhow!("{err}"))? + .into_response(); + kara.headers_mut() + .insert(CONTENT_TYPE, HeaderValue::from_static("application/json")); + Ok(kara) } /// Search some karas from a search set with a regex. We take the json argument as base64 encoded