aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIlion Beyst <ilion.beyst@gmail.com>2022-02-27 21:47:17 +0100
committerIlion Beyst <ilion.beyst@gmail.com>2022-02-27 21:47:29 +0100
commitda7164317681aeca442ccef6ed0a74ad1952f0bf (patch)
tree5e7b3a7b123c19d6b803177d0aa2a4b71026c204
parent22a8f3d619e8ef89eeb9a60ab0a27aed01aa93f7 (diff)
downloadplanetwars.dev-da7164317681aeca442ccef6ed0a74ad1952f0bf.tar.xz
planetwars.dev-da7164317681aeca442ccef6ed0a74ad1952f0bf.zip
seed simplebot on server startup
-rw-r--r--planetwars-server/migrations/2021-12-18-130837_bots/up.sql4
-rw-r--r--planetwars-server/src/lib.rs26
2 files changed, 27 insertions, 3 deletions
diff --git a/planetwars-server/migrations/2021-12-18-130837_bots/up.sql b/planetwars-server/migrations/2021-12-18-130837_bots/up.sql
index a23fbf7..b158940 100644
--- a/planetwars-server/migrations/2021-12-18-130837_bots/up.sql
+++ b/planetwars-server/migrations/2021-12-18-130837_bots/up.sql
@@ -1,11 +1,9 @@
CREATE TABLE bots (
id serial PRIMARY KEY,
owner_id integer REFERENCES users(id),
- name text NOT NULL
+ name text UNIQUE NOT NULL
);
-CREATE UNIQUE INDEX bots_index ON bots(owner_id, name);
-
CREATE TABLE code_bundles (
id serial PRIMARY KEY,
bot_id integer REFERENCES bots(id),
diff --git a/planetwars-server/src/lib.rs b/planetwars-server/src/lib.rs
index 89b3d7a..ec12997 100644
--- a/planetwars-server/src/lib.rs
+++ b/planetwars-server/src/lib.rs
@@ -28,12 +28,38 @@ use axum::{
const BOTS_DIR: &str = "./data/bots";
const MATCHES_DIR: &str = "./data/matches";
const MAPS_DIR: &str = "./data/maps";
+const SIMPLEBOT_PATH: &str = "../simplebot/simplebot.py";
type ConnectionPool = bb8::Pool<DieselConnectionManager<PgConnection>>;
+pub async fn seed_simplebot(pool: &ConnectionPool) {
+ let conn = pool.get().await.expect("could not get database connection");
+ // This transaction is expected to fail when simplebot already exists.
+ let _res = conn.transaction::<(), diesel::result::Error, _>(|| {
+ use db::bots::NewBot;
+
+ let new_bot = NewBot {
+ name: "simplebot",
+ owner_id: None,
+ };
+
+ let simplebot = db::bots::create_bot(&new_bot, &conn)?;
+
+ let simplebot_code =
+ std::fs::read_to_string(SIMPLEBOT_PATH).expect("could not read simplebot code");
+
+ modules::bots::save_code_bundle(&simplebot_code, Some(simplebot.id), &conn)?;
+
+ println!("initialized simplebot");
+
+ Ok(())
+ });
+}
+
pub async fn prepare_db(database_url: &str) -> Pool<DieselConnectionManager<PgConnection>> {
let manager = DieselConnectionManager::<PgConnection>::new(database_url);
let pool = bb8::Pool::builder().build(manager).await.unwrap();
+ seed_simplebot(&pool).await;
return pool;
}