diff options
Diffstat (limited to 'planetwars-server')
-rw-r--r-- | planetwars-server/src/db/bots.rs | 6 | ||||
-rw-r--r-- | planetwars-server/src/routes/bots.rs | 16 |
2 files changed, 18 insertions, 4 deletions
diff --git a/planetwars-server/src/db/bots.rs b/planetwars-server/src/db/bots.rs index d21d9dc..eb66c05 100644 --- a/planetwars-server/src/db/bots.rs +++ b/planetwars-server/src/db/bots.rs @@ -57,3 +57,9 @@ pub fn create_code_bundle( .values(new_code_bundle) .get_result(conn) } + +pub fn find_bot_code_bundles(bot_id: i32, conn: &PgConnection) -> QueryResult<Vec<CodeBundle>> { + code_bundles::table + .filter(code_bundles::bot_id.eq(bot_id)) + .get_results(conn) +} diff --git a/planetwars-server/src/routes/bots.rs b/planetwars-server/src/routes/bots.rs index 83127cd..f722e52 100644 --- a/planetwars-server/src/routes/bots.rs +++ b/planetwars-server/src/routes/bots.rs @@ -5,6 +5,7 @@ use axum::Json; use rand::distributions::Alphanumeric; use rand::Rng; use serde::{Deserialize, Serialize}; +use serde_json::{json, value::Value as JsonValue}; use std::io::Cursor; use std::path::{self, PathBuf}; @@ -35,10 +36,17 @@ pub async fn create_bot( } // TODO: handle errors -pub async fn get_bot(conn: DatabaseConnection, Path(bot_id): Path<i32>) -> impl IntoResponse { - bots::find_bot(bot_id, &conn) - .map(Json) - .map_err(|_| StatusCode::NOT_FOUND) +pub async fn get_bot( + conn: DatabaseConnection, + Path(bot_id): Path<i32>, +) -> Result<Json<JsonValue>, StatusCode> { + let bot = bots::find_bot(bot_id, &conn).map_err(|_| StatusCode::NOT_FOUND)?; + let bundles = bots::find_bot_code_bundles(bot.id, &conn) + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; + Ok(Json(json!({ + "bot": bot, + "bundles": bundles, + }))) } pub async fn get_my_bots( |