diff options
author | Ilion Beyst <ilion.beyst@gmail.com> | 2022-02-28 22:44:06 +0100 |
---|---|---|
committer | Ilion Beyst <ilion.beyst@gmail.com> | 2022-02-28 22:44:06 +0100 |
commit | 5265e19507aba9948bafc984e4ccd796539c4c2f (patch) | |
tree | 19a2bc51091d672d6d41ddc3a1c70382016db9ee /planetwars-server/src | |
parent | da3d7ed02d995794d5c8aab2563e4d0f53d33416 (diff) | |
download | planetwars.dev-5265e19507aba9948bafc984e4ccd796539c4c2f.tar.xz planetwars.dev-5265e19507aba9948bafc984e4ccd796539c4c2f.zip |
bot upload PoC
Diffstat (limited to 'planetwars-server/src')
-rw-r--r-- | planetwars-server/src/lib.rs | 1 | ||||
-rw-r--r-- | planetwars-server/src/routes/bots.rs | 31 |
2 files changed, 32 insertions, 0 deletions
diff --git a/planetwars-server/src/lib.rs b/planetwars-server/src/lib.rs index ec12997..6cc2824 100644 --- a/planetwars-server/src/lib.rs +++ b/planetwars-server/src/lib.rs @@ -90,6 +90,7 @@ pub async fn api(configuration: Configuration) -> Router { get(routes::matches::get_match_log), ) .route("/submit_bot", post(routes::demo::submit_bot)) + .route("/save_bot", post(routes::bots::save_bot)) .layer(AddExtensionLayer::new(db_pool)); api } diff --git a/planetwars-server/src/routes/bots.rs b/planetwars-server/src/routes/bots.rs index 66b4d82..66479bb 100644 --- a/planetwars-server/src/routes/bots.rs +++ b/planetwars-server/src/routes/bots.rs @@ -1,6 +1,7 @@ use axum::extract::{Multipart, Path}; use axum::http::StatusCode; use axum::Json; +use diesel::OptionalExtension; use rand::distributions::Alphanumeric; use rand::Rng; use serde::{Deserialize, Serialize}; @@ -10,10 +11,40 @@ use std::path::PathBuf; use crate::db::bots::{self, CodeBundle}; use crate::db::users::User; +use crate::modules::bots::save_code_bundle; use crate::{DatabaseConnection, BOTS_DIR}; use bots::Bot; #[derive(Serialize, Deserialize, Debug)] +pub struct SaveBotParams { + pub bot_name: String, + pub code: String, +} +pub async fn save_bot( + Json(params): Json<SaveBotParams>, + conn: DatabaseConnection, +) -> Result<(), StatusCode> { + // TODO: authorization + let res = bots::find_bot_by_name(¶ms.bot_name, &conn) + .optional() + .expect("could not run query"); + let bot = match res { + Some(bot) => bot, + None => { + let new_bot = bots::NewBot { + owner_id: None, + name: ¶ms.bot_name, + }; + let bot = bots::create_bot(&new_bot, &conn).expect("could not create bot"); + bot + } + }; + let _code_bundle = + save_code_bundle(¶ms.code, Some(bot.id), &conn).expect("failed to save code bundle"); + Ok(()) +} + +#[derive(Serialize, Deserialize, Debug)] pub struct BotParams { name: String, } |