Add get_people route
This commit is contained in:
parent
8a26cebf3b
commit
7770ab958a
|
|
@ -41,6 +41,7 @@ async fn main() {
|
||||||
.route("/stats", get(get_stats))
|
.route("/stats", get(get_stats))
|
||||||
.route("/event/:event_id", get(get_event))
|
.route("/event/:event_id", get(get_event))
|
||||||
.route("/event", post(create_event))
|
.route("/event", post(create_event))
|
||||||
|
.route("/event/:event_id/people", get(get_people))
|
||||||
.with_state(shared_state);
|
.with_state(shared_state);
|
||||||
|
|
||||||
let addr = SocketAddr::from(([127, 0, 0, 1], 3000));
|
let addr = SocketAddr::from(([127, 0, 0, 1], 3000));
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
use axum::Json;
|
use axum::Json;
|
||||||
use common::event::Event;
|
use common::{event::Event, person::Person};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::errors::ApiError;
|
use crate::errors::ApiError;
|
||||||
|
|
@ -41,3 +41,20 @@ pub struct StatsResponse {
|
||||||
pub person_count: i32,
|
pub person_count: i32,
|
||||||
pub version: String,
|
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(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
28
backend/src/routes/get_people.rs
Normal file
28
backend/src/routes/get_people.rs
Normal 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),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -6,3 +6,6 @@ pub use get_stats::get_stats;
|
||||||
|
|
||||||
mod create_event;
|
mod create_event;
|
||||||
pub use create_event::create_event;
|
pub use create_event::create_event;
|
||||||
|
|
||||||
|
mod get_people;
|
||||||
|
pub use get_people::get_people;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue