diff options
author | Ilion Beyst <ilion.beyst@gmail.com> | 2022-02-27 21:47:17 +0100 |
---|---|---|
committer | Ilion Beyst <ilion.beyst@gmail.com> | 2022-02-27 21:47:29 +0100 |
commit | da7164317681aeca442ccef6ed0a74ad1952f0bf (patch) | |
tree | 5e7b3a7b123c19d6b803177d0aa2a4b71026c204 /planetwars-server | |
parent | 22a8f3d619e8ef89eeb9a60ab0a27aed01aa93f7 (diff) | |
download | planetwars.dev-da7164317681aeca442ccef6ed0a74ad1952f0bf.tar.xz planetwars.dev-da7164317681aeca442ccef6ed0a74ad1952f0bf.zip |
seed simplebot on server startup
Diffstat (limited to 'planetwars-server')
-rw-r--r-- | planetwars-server/migrations/2021-12-18-130837_bots/up.sql | 4 | ||||
-rw-r--r-- | planetwars-server/src/lib.rs | 26 |
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; } |