add parameters to recent_matches api endpoint
This commit is contained in:
parent
aafb785645
commit
3c2f4977e4
2 changed files with 26 additions and 4 deletions
|
@ -129,7 +129,7 @@ pub fn api() -> Router {
|
|||
"/bots/:bot_name/upload",
|
||||
post(routes::bots::upload_code_multipart),
|
||||
)
|
||||
.route("/matches", get(routes::matches::list_public_matches))
|
||||
.route("/matches", get(routes::matches::list_recent_matches))
|
||||
.route("/matches/:match_id", get(routes::matches::get_match_data))
|
||||
.route(
|
||||
"/matches/:match_id/log",
|
||||
|
|
|
@ -1,4 +1,8 @@
|
|||
use axum::{extract::Path, Extension, Json};
|
||||
use axum::{
|
||||
extract::{Path, Query},
|
||||
Extension, Json,
|
||||
};
|
||||
use chrono::NaiveDateTime;
|
||||
use hyper::StatusCode;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::{path::PathBuf, sync::Arc};
|
||||
|
@ -24,10 +28,28 @@ pub struct ApiMatchPlayer {
|
|||
bot_name: Option<String>,
|
||||
}
|
||||
|
||||
pub async fn list_public_matches(
|
||||
#[derive(Serialize, Deserialize)]
|
||||
pub struct ListRecentMatchesParams {
|
||||
count: Option<usize>,
|
||||
// TODO: should timezone be specified here?
|
||||
// TODO: implement these
|
||||
before: Option<NaiveDateTime>,
|
||||
after: Option<NaiveDateTime>,
|
||||
}
|
||||
|
||||
const MAX_NUM_RETURNED_MATCHES: usize = 100;
|
||||
const DEFAULT_NUM_RETURNED_MATCHES: usize = 50;
|
||||
|
||||
pub async fn list_recent_matches(
|
||||
Query(params): Query<ListRecentMatchesParams>,
|
||||
conn: DatabaseConnection,
|
||||
) -> Result<Json<Vec<ApiMatch>>, StatusCode> {
|
||||
matches::list_public_matches(100, &conn)
|
||||
let count = std::cmp::min(
|
||||
params.count.unwrap_or(DEFAULT_NUM_RETURNED_MATCHES),
|
||||
MAX_NUM_RETURNED_MATCHES,
|
||||
);
|
||||
|
||||
matches::list_public_matches(count as i64, &conn)
|
||||
.map_err(|_| StatusCode::BAD_REQUEST)
|
||||
.map(|matches| Json(matches.into_iter().map(match_data_to_api).collect()))
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue