aboutsummaryrefslogtreecommitdiff
path: root/planetwars-server/src
diff options
context:
space:
mode:
Diffstat (limited to 'planetwars-server/src')
-rw-r--r--planetwars-server/src/db/bots.rs6
-rw-r--r--planetwars-server/src/routes/bots.rs16
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(