aboutsummaryrefslogtreecommitdiff
path: root/planetwars-server
diff options
context:
space:
mode:
Diffstat (limited to 'planetwars-server')
-rw-r--r--planetwars-server/Cargo.toml3
-rw-r--r--planetwars-server/diesel.toml1
-rw-r--r--planetwars-server/migrations/2022-01-02-105610_matches/down.sql3
-rw-r--r--planetwars-server/migrations/2022-01-02-105610_matches/up.sql5
-rw-r--r--planetwars-server/src/db/matches.rs3
-rw-r--r--planetwars-server/src/db_types.rs9
-rw-r--r--planetwars-server/src/lib.rs1
-rw-r--r--planetwars-server/src/routes/matches.rs9
-rw-r--r--planetwars-server/src/schema.rs28
9 files changed, 56 insertions, 6 deletions
diff --git a/planetwars-server/Cargo.toml b/planetwars-server/Cargo.toml
index 198d38f..77e8fe9 100644
--- a/planetwars-server/Cargo.toml
+++ b/planetwars-server/Cargo.toml
@@ -10,6 +10,7 @@ tokio = { version = "1.15", features = ["full"] }
hyper = "0.14"
axum = { version = "0.4", features = ["json", "headers", "multipart"] }
diesel = { version = "1.4.4", features = ["postgres", "chrono"] }
+diesel-derive-enum = { version = "1.1", features = ["postgres"] }
bb8 = "0.7"
bb8-diesel = "0.2"
dotenv = "0.15.0"
@@ -28,4 +29,4 @@ planetwars-matchrunner = { path = "../planetwars-matchrunner" }
shlex = "1.1"
[dev-dependencies]
-parking_lot = "0.11" \ No newline at end of file
+parking_lot = "0.11"
diff --git a/planetwars-server/diesel.toml b/planetwars-server/diesel.toml
index 92267c8..d95631b 100644
--- a/planetwars-server/diesel.toml
+++ b/planetwars-server/diesel.toml
@@ -3,3 +3,4 @@
[print_schema]
file = "src/schema.rs"
+import_types = ["diesel::sql_types::*", "crate::db_types::*"]
diff --git a/planetwars-server/migrations/2022-01-02-105610_matches/down.sql b/planetwars-server/migrations/2022-01-02-105610_matches/down.sql
index eadd0fa..430bb1b 100644
--- a/planetwars-server/migrations/2022-01-02-105610_matches/down.sql
+++ b/planetwars-server/migrations/2022-01-02-105610_matches/down.sql
@@ -1,3 +1,4 @@
DROP TABLE match_players;
DROP INDEX match_created_at;
-DROP TABLE matches; \ No newline at end of file
+DROP TABLE matches;
+DROP TYPE match_state; \ No newline at end of file
diff --git a/planetwars-server/migrations/2022-01-02-105610_matches/up.sql b/planetwars-server/migrations/2022-01-02-105610_matches/up.sql
index 88c8c9e..ace13fd 100644
--- a/planetwars-server/migrations/2022-01-02-105610_matches/up.sql
+++ b/planetwars-server/migrations/2022-01-02-105610_matches/up.sql
@@ -1,5 +1,8 @@
+CREATE TYPE match_state AS ENUM ('playing', 'ended');
+
CREATE TABLE matches (
- id SERIAL PRIMARY KEY,
+ id SERIAL PRIMARY KEY NOT NULL,
+ state match_state NOT NULL,
log_path text NOT NULL,
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
);
diff --git a/planetwars-server/src/db/matches.rs b/planetwars-server/src/db/matches.rs
index 9bf00db..36c2200 100644
--- a/planetwars-server/src/db/matches.rs
+++ b/planetwars-server/src/db/matches.rs
@@ -1,3 +1,4 @@
+pub use crate::db_types::MatchState;
use chrono::NaiveDateTime;
use diesel::{BelongingToDsl, QueryDsl, RunQueryDsl};
use diesel::{Connection, GroupedBy, PgConnection, QueryResult};
@@ -7,6 +8,7 @@ use crate::schema::{match_players, matches};
#[derive(Insertable)]
#[table_name = "matches"]
pub struct NewMatch<'a> {
+ pub state: MatchState,
pub log_path: &'a str,
}
@@ -25,6 +27,7 @@ pub struct NewMatchPlayer {
#[table_name = "matches"]
pub struct MatchBase {
pub id: i32,
+ pub state: MatchState,
pub log_path: String,
pub created_at: NaiveDateTime,
}
diff --git a/planetwars-server/src/db_types.rs b/planetwars-server/src/db_types.rs
new file mode 100644
index 0000000..d1225d7
--- /dev/null
+++ b/planetwars-server/src/db_types.rs
@@ -0,0 +1,9 @@
+use diesel_derive_enum::DbEnum;
+
+#[derive(DbEnum, Debug, Clone, Copy, PartialEq, Eq, Hash)]
+#[DieselType = "Match_state"]
+
+pub enum MatchState {
+ Playing,
+ Finished,
+}
diff --git a/planetwars-server/src/lib.rs b/planetwars-server/src/lib.rs
index 754d062..b5a204e 100644
--- a/planetwars-server/src/lib.rs
+++ b/planetwars-server/src/lib.rs
@@ -4,6 +4,7 @@
extern crate diesel;
pub mod db;
+pub mod db_types;
pub mod routes;
pub mod schema;
diff --git a/planetwars-server/src/routes/matches.rs b/planetwars-server/src/routes/matches.rs
index 4dfd44e..fed0f7b 100644
--- a/planetwars-server/src/routes/matches.rs
+++ b/planetwars-server/src/routes/matches.rs
@@ -1,4 +1,4 @@
-use std::{io::Read, path::PathBuf};
+use std::path::PathBuf;
use axum::{
extract::{Extension, Path},
@@ -10,7 +10,11 @@ use rand::{distributions::Alphanumeric, Rng};
use serde::{Deserialize, Serialize};
use crate::{
- db::{bots, matches, users::User},
+ db::{
+ bots,
+ matches::{self, MatchState},
+ users::User,
+ },
ConnectionPool, DatabaseConnection, BOTS_DIR, MAPS_DIR, MATCHES_DIR,
};
@@ -81,6 +85,7 @@ async fn run_match_task(
pool: ConnectionPool,
) {
let match_data = matches::NewMatch {
+ state: MatchState::Finished,
log_path: &log_file_name,
};
diff --git a/planetwars-server/src/schema.rs b/planetwars-server/src/schema.rs
index 413c4d1..7f60d64 100644
--- a/planetwars-server/src/schema.rs
+++ b/planetwars-server/src/schema.rs
@@ -1,4 +1,7 @@
table! {
+ use diesel::sql_types::*;
+ use crate::db_types::*;
+
bots (id) {
id -> Int4,
owner_id -> Int4,
@@ -7,6 +10,9 @@ table! {
}
table! {
+ use diesel::sql_types::*;
+ use crate::db_types::*;
+
code_bundles (id) {
id -> Int4,
bot_id -> Int4,
@@ -16,6 +22,9 @@ table! {
}
table! {
+ use diesel::sql_types::*;
+ use crate::db_types::*;
+
match_players (match_id, player_id) {
match_id -> Int4,
bot_id -> Int4,
@@ -24,14 +33,21 @@ table! {
}
table! {
+ use diesel::sql_types::*;
+ use crate::db_types::*;
+
matches (id) {
id -> Int4,
+ state -> Match_state,
log_path -> Text,
created_at -> Timestamp,
}
}
table! {
+ use diesel::sql_types::*;
+ use crate::db_types::*;
+
sessions (id) {
id -> Int4,
user_id -> Int4,
@@ -40,6 +56,9 @@ table! {
}
table! {
+ use diesel::sql_types::*;
+ use crate::db_types::*;
+
users (id) {
id -> Int4,
username -> Varchar,
@@ -54,4 +73,11 @@ joinable!(match_players -> bots (bot_id));
joinable!(match_players -> matches (match_id));
joinable!(sessions -> users (user_id));
-allow_tables_to_appear_in_same_query!(bots, code_bundles, match_players, matches, sessions, users,);
+allow_tables_to_appear_in_same_query!(
+ bots,
+ code_bundles,
+ match_players,
+ matches,
+ sessions,
+ users,
+);