Add get_people route

This commit is contained in:
Ben Grant 2023-05-13 14:02:16 +10:00
parent 8a26cebf3b
commit 7770ab958a
4 changed files with 50 additions and 1 deletions

View file

@ -41,6 +41,7 @@ async fn main() {
.route("/stats", get(get_stats))
.route("/event/:event_id", get(get_event))
.route("/event", post(create_event))
.route("/event/:event_id/people", get(get_people))
.with_state(shared_state);
let addr = SocketAddr::from(([127, 0, 0, 1], 3000));

View file

@ -1,5 +1,5 @@
use axum::Json;
use common::event::Event;
use common::{event::Event, person::Person};
use serde::{Deserialize, Serialize};
use crate::errors::ApiError;
@ -41,3 +41,20 @@ pub struct StatsResponse {
pub person_count: i32,
pub version: String,
}
#[derive(Serialize)]
pub struct PersonResponse {
pub name: String,
pub availability: Vec<String>,
pub created: i64,
}
impl From<Person> for PersonResponse {
fn from(value: Person) -> Self {
Self {
name: value.name,
availability: value.availability,
created: value.created_at.timestamp(),
}
}
}

View file

@ -0,0 +1,28 @@
use axum::{
extract::{self, Path},
Json,
};
use common::adaptor::Adaptor;
use crate::{
errors::ApiError,
payloads::{ApiResult, PersonResponse},
State,
};
pub async fn get_people<A: Adaptor>(
extract::State(state): State<A>,
Path(event_id): Path<String>,
) -> ApiResult<Vec<PersonResponse>, A> {
let adaptor = &state.lock().await.adaptor;
let people = adaptor
.get_people(event_id)
.await
.map_err(ApiError::AdaptorError)?;
match people {
Some(people) => Ok(Json(people.into_iter().map(|p| p.into()).collect())),
None => Err(ApiError::NotFound),
}
}

View file

@ -6,3 +6,6 @@ pub use get_stats::get_stats;
mod create_event;
pub use create_event::create_event;
mod get_people;
pub use get_people::get_people;