#![allow(non_snake_case)]
use crate::{
data::{Activity, Format},
db::activity::find_activity_by_iri,
emit_response,
lrs::{resources::WithResource, Headers, User, DB},
DataError, MyError,
};
use iri_string::types::IriStr;
use rocket::{get, http::Status, routes, State};
use tracing::{debug, warn};
#[doc(hidden)]
pub fn routes() -> Vec<rocket::Route> {
routes![get]
}
#[get("/?<activityId>")]
async fn get(
c: Headers,
activityId: &str,
db: &State<DB>,
user: User,
) -> Result<WithResource<Activity>, MyError> {
debug!("----- get ----- {}", user);
user.can_use_xapi()?;
let iri = IriStr::new(activityId)
.map_err(|x| MyError::Data(DataError::IRI(x)).with_status(Status::BadRequest))?;
let format = Format::from(c.languages().to_vec());
let x = find_activity_by_iri(db.pool(), iri, &format).await?;
let mut resource = match x {
Some(x) => x,
None => {
warn!("I know nothing about {}", iri);
Activity::from_iri_str(activityId).unwrap()
}
};
resource.set_object_type();
emit_response!(c, resource => Activity)
}