add get_attending endpoint
This commit is contained in:
parent
c5bbad6460
commit
f8fc5d3dce
@ -1,11 +1,16 @@
|
|||||||
use axum::{extract::State, http::StatusCode, response::IntoResponse, Json};
|
use axum::{
|
||||||
|
extract::{Query, State},
|
||||||
|
http::StatusCode,
|
||||||
|
response::IntoResponse,
|
||||||
|
Json,
|
||||||
|
};
|
||||||
use axum_auth::AuthBearer;
|
use axum_auth::AuthBearer;
|
||||||
use serde_json::json;
|
use serde_json::json;
|
||||||
use sqlx::query;
|
use sqlx::{query, query_as};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
jwt::handle_token,
|
jwt::handle_token,
|
||||||
models::{ConfirmAttending, MarkAttending, Role},
|
models::{AttendingEntry, ConfirmAttending, GetAttendingQuery, MarkAttending, Role},
|
||||||
AppState,
|
AppState,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -57,6 +62,44 @@ pub async fn confirm_attending(
|
|||||||
.into_response()
|
.into_response()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn get_attending(
|
||||||
|
AuthBearer(token): AuthBearer,
|
||||||
|
State(app_state): State<AppState>,
|
||||||
|
Query(attending_query): Query<GetAttendingQuery>,
|
||||||
|
) -> impl IntoResponse {
|
||||||
|
match handle_token(token, &app_state, Role::Teacher) {
|
||||||
|
Ok(token_data) => token_data,
|
||||||
|
Err(err) => return err,
|
||||||
|
};
|
||||||
|
|
||||||
|
let result = query_as!(
|
||||||
|
AttendingEntry,
|
||||||
|
r#"
|
||||||
|
SELECT
|
||||||
|
user_id,
|
||||||
|
u.username
|
||||||
|
FROM event_attendees ea
|
||||||
|
INNER JOIN users u
|
||||||
|
ON u.id = ea.user_id
|
||||||
|
WHERE event_id = $1
|
||||||
|
"#,
|
||||||
|
attending_query.event_id,
|
||||||
|
)
|
||||||
|
.fetch_all(&app_state.db_pool)
|
||||||
|
.await;
|
||||||
|
|
||||||
|
match result {
|
||||||
|
Ok(attending) => (StatusCode::OK, Json(json!(attending))),
|
||||||
|
Err(err) => (
|
||||||
|
StatusCode::INTERNAL_SERVER_ERROR,
|
||||||
|
Json(json!({
|
||||||
|
"error": format!("Unknown error confirming attendence: {:?}", err)
|
||||||
|
})),
|
||||||
|
),
|
||||||
|
}
|
||||||
|
.into_response()
|
||||||
|
}
|
||||||
|
|
||||||
pub async fn mark_attending(
|
pub async fn mark_attending(
|
||||||
AuthBearer(token): AuthBearer,
|
AuthBearer(token): AuthBearer,
|
||||||
State(app_state): State<AppState>,
|
State(app_state): State<AppState>,
|
||||||
|
|||||||
@ -59,6 +59,7 @@ async fn main() {
|
|||||||
.route("/event/my", get(events::my_events))
|
.route("/event/my", get(events::my_events))
|
||||||
.route("/report", get(report::get_report))
|
.route("/report", get(report::get_report))
|
||||||
.route("/attending/confirm", put(attending::confirm_attending))
|
.route("/attending/confirm", put(attending::confirm_attending))
|
||||||
|
.route("/attending", get(attending::get_attending))
|
||||||
.route("/attending/mark", post(attending::mark_attending))
|
.route("/attending/mark", post(attending::mark_attending))
|
||||||
.route("/attending/unmark", delete(attending::unmark_attending))
|
.route("/attending/unmark", delete(attending::unmark_attending))
|
||||||
.route("/leaderboard/my_points", get(leaderboard::get_points))
|
.route("/leaderboard/my_points", get(leaderboard::get_points))
|
||||||
|
|||||||
@ -22,6 +22,17 @@ pub struct PrizeQuery {
|
|||||||
pub grade: i32,
|
pub grade: i32,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Hash, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
|
||||||
|
pub struct AttendingEntry {
|
||||||
|
pub user_id: i32,
|
||||||
|
pub username: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Copy, Clone, Hash, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
|
||||||
|
pub struct GetAttendingQuery {
|
||||||
|
pub event_id: i32,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Copy, Clone, Hash, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
|
#[derive(Copy, Clone, Hash, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
|
||||||
pub struct WinnerQuery {
|
pub struct WinnerQuery {
|
||||||
pub winner_id: i32,
|
pub winner_id: i32,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user