aboutsummaryrefslogtreecommitdiff
path: root/planetwars-server/src/modules
diff options
context:
space:
mode:
authorIlion Beyst <ilion.beyst@gmail.com>2022-02-27 20:35:22 +0100
committerIlion Beyst <ilion.beyst@gmail.com>2022-02-27 20:35:22 +0100
commit22a8f3d619e8ef89eeb9a60ab0a27aed01aa93f7 (patch)
tree1d6307c96ebd3456e74509203e1155a2c82ffee1 /planetwars-server/src/modules
parent6ef6a872fe3bbe389e92145b39fd88d864f6a790 (diff)
downloadplanetwars.dev-22a8f3d619e8ef89eeb9a60ab0a27aed01aa93f7.tar.xz
planetwars.dev-22a8f3d619e8ef89eeb9a60ab0a27aed01aa93f7.zip
save all uploaded code bundles in database
Diffstat (limited to 'planetwars-server/src/modules')
-rw-r--r--planetwars-server/src/modules/bots.rs23
-rw-r--r--planetwars-server/src/modules/mod.rs3
2 files changed, 26 insertions, 0 deletions
diff --git a/planetwars-server/src/modules/bots.rs b/planetwars-server/src/modules/bots.rs
new file mode 100644
index 0000000..843e48d
--- /dev/null
+++ b/planetwars-server/src/modules/bots.rs
@@ -0,0 +1,23 @@
+use std::path::PathBuf;
+
+use diesel::{PgConnection, QueryResult};
+
+use crate::{db, util::gen_alphanumeric, BOTS_DIR};
+
+pub fn save_code_bundle(
+ bot_code: &str,
+ bot_id: Option<i32>,
+ conn: &PgConnection,
+) -> QueryResult<db::bots::CodeBundle> {
+ let bundle_name = gen_alphanumeric(16);
+
+ let code_bundle_dir = PathBuf::from(BOTS_DIR).join(&bundle_name);
+ std::fs::create_dir(&code_bundle_dir).unwrap();
+ std::fs::write(code_bundle_dir.join("bot.py"), bot_code).unwrap();
+
+ let new_code_bundle = db::bots::NewCodeBundle {
+ bot_id,
+ path: &bundle_name,
+ };
+ db::bots::create_code_bundle(&new_code_bundle, conn)
+}
diff --git a/planetwars-server/src/modules/mod.rs b/planetwars-server/src/modules/mod.rs
new file mode 100644
index 0000000..57c1ef5
--- /dev/null
+++ b/planetwars-server/src/modules/mod.rs
@@ -0,0 +1,3 @@
+// This module implements general domain logic, not directly
+// tied to the database or API layers.
+pub mod bots;