add match_state to matches
This commit is contained in:
parent
1cde40b459
commit
5b10d5e98e
9 changed files with 56 additions and 6 deletions
|
@ -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"
|
||||
|
|
|
@ -3,3 +3,4 @@
|
|||
|
||||
[print_schema]
|
||||
file = "src/schema.rs"
|
||||
import_types = ["diesel::sql_types::*", "crate::db_types::*"]
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
DROP TABLE match_players;
|
||||
DROP INDEX match_created_at;
|
||||
DROP TABLE matches;
|
||||
DROP TYPE match_state;
|
|
@ -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
|
||||
);
|
||||
|
|
|
@ -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,
|
||||
}
|
||||
|
|
9
planetwars-server/src/db_types.rs
Normal file
9
planetwars-server/src/db_types.rs
Normal file
|
@ -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,
|
||||
}
|
|
@ -4,6 +4,7 @@
|
|||
extern crate diesel;
|
||||
|
||||
pub mod db;
|
||||
pub mod db_types;
|
||||
pub mod routes;
|
||||
pub mod schema;
|
||||
|
||||
|
|
|
@ -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,
|
||||
};
|
||||
|
||||
|
|
|
@ -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,
|
||||
);
|
||||
|
|
Loading…
Reference in a new issue