diff --git a/backend/src/main.rs b/backend/src/main.rs index 2864391..bf3da57 100644 --- a/backend/src/main.rs +++ b/backend/src/main.rs @@ -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)); diff --git a/backend/src/payloads.rs b/backend/src/payloads.rs index 3f9de74..27e9334 100644 --- a/backend/src/payloads.rs +++ b/backend/src/payloads.rs @@ -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, + pub created: i64, +} + +impl From for PersonResponse { + fn from(value: Person) -> Self { + Self { + name: value.name, + availability: value.availability, + created: value.created_at.timestamp(), + } + } +} diff --git a/backend/src/routes/get_people.rs b/backend/src/routes/get_people.rs new file mode 100644 index 0000000..e8fb9c2 --- /dev/null +++ b/backend/src/routes/get_people.rs @@ -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( + extract::State(state): State, + Path(event_id): Path, +) -> ApiResult, 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), + } +} diff --git a/backend/src/routes/mod.rs b/backend/src/routes/mod.rs index f1fb456..1eb81d7 100644 --- a/backend/src/routes/mod.rs +++ b/backend/src/routes/mod.rs @@ -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;