diff options
-rw-r--r-- | Cargo.lock | 4 | ||||
-rw-r--r-- | Cargo.toml | 3 | ||||
-rw-r--r-- | README.md | 1 | ||||
-rw-r--r-- | migrations/1_create_masses/down.sql | 1 | ||||
-rw-r--r-- | migrations/1_create_masses/up.sql | 1 | ||||
-rw-r--r-- | postgres/.pgpass | 1 | ||||
-rw-r--r-- | postgres/bootstrap.sh | 9 | ||||
-rw-r--r-- | postgres/pg_hba.conf | 92 | ||||
-rw-r--r-- | src/bin/client.rs | 6 | ||||
-rw-r--r-- | src/bin/migrate.rs | 5 | ||||
-rw-r--r-- | src/lib.rs | 3 | ||||
-rw-r--r-- | src/mass.rs | 31 | ||||
-rw-r--r-- | src/schema.rs | 2 | ||||
-rw-r--r-- | tests/tests.rs | 18 |
14 files changed, 49 insertions, 128 deletions
@@ -248,6 +248,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" name = "serde" version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "serde_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)", +] [[package]] name = "serde_derive" @@ -278,7 +281,6 @@ dependencies = [ "migrations_internals 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", "termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "toml 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", @@ -5,8 +5,7 @@ authors = ["tom barrett <spalf0@gmail.com>"] edition = "2018" [dependencies] -serde = "1.0" -serde_derive = "1.0" +serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" termion = "*" rand = "0.6" @@ -29,3 +29,4 @@ nice to haves - server ability to quit and import/export all current data - have something like lightshope donation page - give tractorbeam client bring option ability to choose desired distance +- make constants file some way of being global and read on run so you can give it faster sleep paramters for tests diff --git a/migrations/1_create_masses/down.sql b/migrations/1_create_masses/down.sql index 819bb40..9e8b3a8 100644 --- a/migrations/1_create_masses/down.sql +++ b/migrations/1_create_masses/down.sql @@ -1,2 +1 @@ --- This file should undo anything in `up.sql` DROP TABLE masses diff --git a/migrations/1_create_masses/up.sql b/migrations/1_create_masses/up.sql index c0b6890..67c3b3d 100644 --- a/migrations/1_create_masses/up.sql +++ b/migrations/1_create_masses/up.sql @@ -1,4 +1,3 @@ --- Your SQL goes here CREATE TABLE masses ( id SERIAL PRIMARY KEY, name VARCHAR NOT NULL, diff --git a/postgres/.pgpass b/postgres/.pgpass deleted file mode 100644 index 64413d2..0000000 --- a/postgres/.pgpass +++ /dev/null @@ -1 +0,0 @@ -localhost:5432:*:space:space diff --git a/postgres/bootstrap.sh b/postgres/bootstrap.sh index 070e104..11474a9 100644 --- a/postgres/bootstrap.sh +++ b/postgres/bootstrap.sh @@ -18,10 +18,13 @@ sudo -u postgres psql -c "CREATE USER $USERNAME WITH PASSWORD '$PASSWORD';" sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $USERNAME;" # copy configs -cp /vagrant/postgres/*conf /etc/postgresql/9.6/main/ -cp /vagrant/postgres/.pg* /home/vagrant/ +cp /vagrant/postgres/pg_hba.conf /etc/postgresql/9.6/main/ +cp /vagrant/postgres/postgresql.conf /etc/postgresql/9.6/main/ +cp /vagrant/postgres/.pgadmin3 /home/vagrant/ +echo "localhost:5432:*:$USERNAME:$PASSWORD" > /home/vagrant/.pgpass -# give ownership +# give permissions +chmod 0600 /home/vagrant/.pgpass chown -R vagrant:vagrant /home/vagrant # systemd diff --git a/postgres/pg_hba.conf b/postgres/pg_hba.conf index f9e80f6..0447eb5 100644 --- a/postgres/pg_hba.conf +++ b/postgres/pg_hba.conf @@ -1,94 +1,8 @@ -# PostgreSQL Client Authentication Configuration File -# =================================================== -# -# Refer to the "Client Authentication" section in the PostgreSQL -# documentation for a complete description of this file. A short -# synopsis follows. -# -# This file controls: which hosts are allowed to connect, how clients -# are authenticated, which PostgreSQL user names they can use, which -# databases they can access. Records take one of these forms: -# -# local DATABASE USER METHOD [OPTIONS] -# host DATABASE USER ADDRESS METHOD [OPTIONS] -# hostssl DATABASE USER ADDRESS METHOD [OPTIONS] -# hostnossl DATABASE USER ADDRESS METHOD [OPTIONS] -# -# (The uppercase items must be replaced by actual values.) -# -# The first field is the connection type: "local" is a Unix-domain -# socket, "host" is either a plain or SSL-encrypted TCP/IP socket, -# "hostssl" is an SSL-encrypted TCP/IP socket, and "hostnossl" is a -# plain TCP/IP socket. -# -# DATABASE can be "all", "sameuser", "samerole", "replication", a -# database name, or a comma-separated list thereof. The "all" -# keyword does not match "replication". Access to replication -# must be enabled in a separate record (see example below). -# -# USER can be "all", a user name, a group name prefixed with "+", or a -# comma-separated list thereof. In both the DATABASE and USER fields -# you can also write a file name prefixed with "@" to include names -# from a separate file. -# -# ADDRESS specifies the set of hosts the record matches. It can be a -# host name, or it is made up of an IP address and a CIDR mask that is -# an integer (between 0 and 32 (IPv4) or 128 (IPv6) inclusive) that -# specifies the number of significant bits in the mask. A host name -# that starts with a dot (.) matches a suffix of the actual host name. -# Alternatively, you can write an IP address and netmask in separate -# columns to specify the set of hosts. Instead of a CIDR-address, you -# can write "samehost" to match any of the server's own IP addresses, -# or "samenet" to match any address in any subnet that the server is -# directly connected to. -# -# METHOD can be "trust", "reject", "md5", "password", "gss", "sspi", -# "ident", "peer", "pam", "ldap", "radius" or "cert". Note that -# "password" sends passwords in clear text; "md5" is preferred since -# it sends encrypted passwords. -# -# OPTIONS are a set of options for the authentication in the format -# NAME=VALUE. The available options depend on the different -# authentication methods -- refer to the "Client Authentication" -# section in the documentation for a list of which options are -# available for which authentication methods. -# -# Database and user names containing spaces, commas, quotes and other -# special characters must be quoted. Quoting one of the keywords -# "all", "sameuser", "samerole" or "replication" makes the name lose -# its special character, and just match a database or username with -# that name. -# -# This file is read on server startup and when the postmaster receives -# a SIGHUP signal. If you edit the file on a running system, you have -# to SIGHUP the postmaster for the changes to take effect. You can -# use "pg_ctl reload" to do that. - -# Put your actual configuration here +# TYPE DATABASE USER ADDRESS METHOD +# actual configuration host all all 0.0.0.0/0 md5 -# ---------------------------------- -# If you want to allow non-local connections, you need to add more -# "host" records. In that case you will also need to make PostgreSQL -# listen on a non-local interface via the listen_addresses -# configuration parameter, or via the -i or -h command line switches. - -# DO NOT DISABLE! -# If you change this first entry you will need to make sure that the -# database superuser can access the database using some other method. -# Noninteractive access to all databases is required during automatic -# maintenance (custom daily cronjobs, replication, and similar tasks). -# -# Database administrative login by Unix domain socket +# defaults local all postgres peer -# TYPE DATABASE USER ADDRESS METHOD -# "local" is for Unix domain socket connections only local all all peer -# IPv4 local connections: host all all 127.0.0.1/32 md5 -# IPv6 local connections: host all all ::1/128 md5 -# Allow replication connections from localhost, by a user with the -# replication privilege. -#local replication postgres peer -#host replication postgres 127.0.0.1/32 md5 -#host replication postgres ::1/128 md5 diff --git a/src/bin/client.rs b/src/bin/client.rs index cbc7302..a91c2dc 100644 --- a/src/bin/client.rs +++ b/src/bin/client.rs @@ -1,11 +1,11 @@ +#[macro_use] +extern crate serde; + extern crate clap; extern crate serde_json; extern crate space; extern crate toml; -#[macro_use] -extern crate serde_derive; - use clap::{App, SubCommand}; use std::fs::File; use std::io; diff --git a/src/bin/migrate.rs b/src/bin/migrate.rs index 8d269a4..f19a766 100644 --- a/src/bin/migrate.rs +++ b/src/bin/migrate.rs @@ -6,9 +6,4 @@ use space::math::get_db_url; fn main() { let connection = PgConnection::establish(&get_db_url()).expect("Cannot connect"); migrations_internals::run_pending_migrations(&connection).expect("Cannot run migrations"); - - //migrations_internals::revert_latest_migration(&connection) - // .expect("Cannot revert migrations"); - //migrations_internals::revert_latest_migration(&connection) - // .expect("Cannot revert migrations"); } @@ -1,5 +1,6 @@ #[macro_use] -extern crate serde_derive; +extern crate serde; + #[macro_use] extern crate diesel; diff --git a/src/mass.rs b/src/mass.rs index ed859a4..cbac721 100644 --- a/src/mass.rs +++ b/src/mass.rs @@ -26,9 +26,10 @@ pub struct Mass { pub effects: Effects, } -#[derive(Queryable)] +#[derive(Queryable, Insertable)] +#[table_name = "db_masses"] pub struct MassEntry { - pub id: i32, + pub id: Option<i32>, pub name: String, pub pos_x: f64, pub pos_y: f64, @@ -39,17 +40,16 @@ pub struct MassEntry { pub type_data: serde_json::Value, } -#[derive(Insertable)] -#[table_name = "db_masses"] -pub struct NewMassEntry { - pub name: String, - pub pos_x: f64, - pub pos_y: f64, - pub pos_z: f64, - pub vel_x: f64, - pub vel_y: f64, - pub vel_z: f64, - pub type_data: serde_json::Value, +impl MassEntry { + pub fn to_mass(&self) -> Mass { + Mass { + position: Vector::new(self.pos_x, self.pos_y, self.pos_z), + velocity: Vector::new(self.vel_x, self.vel_y, self.vel_z), + mass_type: serde_json::from_str(&serde_json::to_string(&self.type_data).unwrap()) + .unwrap(), + effects: Effects::new(), + } + } } #[derive(Serialize, Deserialize, Debug, Clone, Default)] @@ -327,8 +327,9 @@ impl Mass { } } - pub fn to_new_mass_entry(&self, name: String) -> NewMassEntry { - NewMassEntry { + pub fn to_mass_entry(&self, name: String) -> MassEntry { + MassEntry { + id: None, name, pos_x: self.position.x, pos_y: self.position.y, diff --git a/src/schema.rs b/src/schema.rs index 2bb43ed..71abe49 100644 --- a/src/schema.rs +++ b/src/schema.rs @@ -1,6 +1,6 @@ table! { masses (id) { - id -> Integer, + id -> Nullable<Integer>, name -> Varchar, pos_x -> Double, pos_y -> Double, diff --git a/tests/tests.rs b/tests/tests.rs index fd8349d..781e365 100644 --- a/tests/tests.rs +++ b/tests/tests.rs @@ -529,14 +529,15 @@ mod tests { fn test_postgres() { let connection = PgConnection::establish(&get_db_url()).expect("Cannot connect"); - let masses = db_masses + let size = db_masses .load::<MassEntry>(&connection) - .expect("Cannot query, probably no migrations, run 'cargo run --bin migrate'"); - let size = masses.len(); - let name = String::from("test"); + .expect("Cannot query, probably no migrations, run 'cargo run --bin migrate'") + .len(); + let name = String::from("test"); + let mass = Mass::new_astroid(); diesel::insert_into(db_masses) - .values(&Mass::new_astroid().to_new_mass_entry(name.clone())) + .values(&mass.to_mass_entry(name.clone())) .execute(&connection) .expect("Cannot insert"); @@ -547,6 +548,13 @@ mod tests { assert!(len == size + 1); + let db_mass = db_masses + .filter(dsl::name.eq(name.clone())) + .load::<MassEntry>(&connection) + .expect("Cannot filter"); + + assert!(mass.position.x == db_mass[0].pos_x); + diesel::delete(db_masses.filter(dsl::name.eq(name))) .execute(&connection) .expect("Cannot delete"); |