From 5265e19507aba9948bafc984e4ccd796539c4c2f Mon Sep 17 00:00:00 2001 From: Ilion Beyst Date: Mon, 28 Feb 2022 22:44:06 +0100 Subject: bot upload PoC --- planetwars-server/src/routes/bots.rs | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'planetwars-server/src/routes/bots.rs') 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,9 +11,39 @@ 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, + 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, -- cgit v1.2.3