From 45e15b1a7b0ec21cc5c6461993a4e9466e5c3447 Mon Sep 17 00:00:00 2001 From: core Date: Thu, 30 Nov 2023 13:42:33 -0500 Subject: [PATCH] API work, add savefile data --- Cargo.lock | 37 +++++++++++++++++++ Cargo.toml | 3 +- server/Cargo.toml | 1 + starkingdoms-api/Cargo.toml | 4 +- .../down.sql | 1 + .../up.sql | 5 +++ .../down.sql | 1 + .../up.sql | 1 + starkingdoms-api/src/models.rs | 13 +++++++ starkingdoms-api/src/routes/signup.rs | 1 + starkingdoms-api/src/schema.rs | 11 ++++++ starkingdoms-common/Cargo.toml | 9 +++++ starkingdoms-common/src/lib.rs | 7 ++++ 13 files changed, 92 insertions(+), 2 deletions(-) create mode 100644 starkingdoms-api/migrations/2023-11-30-181014_create_table_savefiles/down.sql create mode 100644 starkingdoms-api/migrations/2023-11-30-181014_create_table_savefiles/up.sql create mode 100644 starkingdoms-api/migrations/2023-11-30-183150_alter_table_users_add_latest_savefile/down.sql create mode 100644 starkingdoms-api/migrations/2023-11-30-183150_alter_table_users_add_latest_savefile/up.sql create mode 100644 starkingdoms-common/Cargo.toml create mode 100644 starkingdoms-common/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index 30a33a2ee6bc306d35cc740a71af2ca2c8812234..1bc0d4580a2c16108e5879bf0c53d1bb47614911 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1594,6 +1594,7 @@ dependencies = [ "byteorder", "diesel_derives", "itoa", + "pq-sys", "serde_json", ] @@ -1624,6 +1625,17 @@ dependencies = [ "syn 2.0.39", ] +[[package]] +name = "diesel_json" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fc50de1d729b55dfbb03e2d2db846684e3ab585f4ee9cfc3c675d236f951888" +dependencies = [ + "diesel", + "serde", + "serde_json", +] + [[package]] name = "diesel_migrations" version = "2.1.0" @@ -3005,6 +3017,15 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +[[package]] +name = "pq-sys" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31c0052426df997c0cbd30789eb44ca097e3541717a7b8fa36b1c464ee7edebd" +dependencies = [ + "vcpkg", +] + [[package]] name = "proc-macro-crate" version = "1.3.1" @@ -3477,6 +3498,7 @@ dependencies = [ "bb8", "diesel", "diesel-async", + "diesel_json", "diesel_migrations", "env_logger", "hmac", @@ -3488,9 +3510,17 @@ dependencies = [ "serde", "serde_json", "sha2", + "starkingdoms-common", "toml 0.8.8", ] +[[package]] +name = "starkingdoms-common" +version = "0.1.0" +dependencies = [ + "serde", +] + [[package]] name = "starkingdoms-server" version = "0.0.1" @@ -3501,6 +3531,7 @@ dependencies = [ "rand", "serde", "serde_json", + "starkingdoms-common", "tracing-subscriber", ] @@ -3940,6 +3971,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + [[package]] name = "version_check" version = "0.9.4" diff --git a/Cargo.toml b/Cargo.toml index 14f358445544556ae39ec9df87acd70bbcfc9ec7..6c7e6c39f8cd41333aa2baa574347ce6accf92b8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,7 @@ [workspace] members = [ "server", - "starkingdoms-api" + "starkingdoms-api", + "starkingdoms-common" ] resolver = "2" diff --git a/server/Cargo.toml b/server/Cargo.toml index 1d7a8f9711b43e732b0384706185114920728aef..a671ab8ab923f472466a61d4e9ce16b4bed8b520 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -12,3 +12,4 @@ bevy_twite = { git = "https://gitlab.com/ghostlyzsh/twite.git" } bevy_rapier2d = "0.23.0" rand = "0.8.5" tracing-subscriber = "0.3" +starkingdoms-common = { version = "0.1", path = "../starkingdoms-common" } \ No newline at end of file diff --git a/starkingdoms-api/Cargo.toml b/starkingdoms-api/Cargo.toml index c3fdbae33b4bf5a4e36653f8d4441565accecfd0..5228de1a48fa3829ffa9387ee5388a46591f8774 100644 --- a/starkingdoms-api/Cargo.toml +++ b/starkingdoms-api/Cargo.toml @@ -26,4 +26,6 @@ password-hash = "0.5" rs-snowflake = "0.6" jwt = "0.16" sha2 = "0.10" -hmac = "0.12" \ No newline at end of file +hmac = "0.12" +starkingdoms-common = { version = "0.1", path = "../starkingdoms-common" } +diesel_json = "0.2" \ No newline at end of file diff --git a/starkingdoms-api/migrations/2023-11-30-181014_create_table_savefiles/down.sql b/starkingdoms-api/migrations/2023-11-30-181014_create_table_savefiles/down.sql new file mode 100644 index 0000000000000000000000000000000000000000..9ad8a2b56caee7821ec714aca911fe4428fdcca6 --- /dev/null +++ b/starkingdoms-api/migrations/2023-11-30-181014_create_table_savefiles/down.sql @@ -0,0 +1 @@ +DROP TABLE savefiles; \ No newline at end of file diff --git a/starkingdoms-api/migrations/2023-11-30-181014_create_table_savefiles/up.sql b/starkingdoms-api/migrations/2023-11-30-181014_create_table_savefiles/up.sql new file mode 100644 index 0000000000000000000000000000000000000000..43676080b2c6b234dce38b43581b68b8792b618a --- /dev/null +++ b/starkingdoms-api/migrations/2023-11-30-181014_create_table_savefiles/up.sql @@ -0,0 +1,5 @@ +CREATE TABLE savefiles ( + id BIGINT NOT NULL PRIMARY KEY, + user_id BIGINT NOT NULL REFERENCES users(id), + save_data jsonb NOT NULL +); \ No newline at end of file diff --git a/starkingdoms-api/migrations/2023-11-30-183150_alter_table_users_add_latest_savefile/down.sql b/starkingdoms-api/migrations/2023-11-30-183150_alter_table_users_add_latest_savefile/down.sql new file mode 100644 index 0000000000000000000000000000000000000000..98a37d280ffbfade2a254de585f502744913d865 --- /dev/null +++ b/starkingdoms-api/migrations/2023-11-30-183150_alter_table_users_add_latest_savefile/down.sql @@ -0,0 +1 @@ +ALTER TABLE users DROP COLUMN latest_savefile; \ No newline at end of file diff --git a/starkingdoms-api/migrations/2023-11-30-183150_alter_table_users_add_latest_savefile/up.sql b/starkingdoms-api/migrations/2023-11-30-183150_alter_table_users_add_latest_savefile/up.sql new file mode 100644 index 0000000000000000000000000000000000000000..d38c80ae7edc97e95d77bfd309758c9ab4bdd407 --- /dev/null +++ b/starkingdoms-api/migrations/2023-11-30-183150_alter_table_users_add_latest_savefile/up.sql @@ -0,0 +1 @@ +ALTER TABLE users ADD COLUMN latest_savefile BIGINT NULL REFERENCES savefiles(id); \ No newline at end of file diff --git a/starkingdoms-api/src/models.rs b/starkingdoms-api/src/models.rs index 8d16d30cac0f10f600ef5f46348bd591e2516a33..f60660b3dfe72a991238a07112773e391a6a59ad 100644 --- a/starkingdoms-api/src/models.rs +++ b/starkingdoms-api/src/models.rs @@ -15,6 +15,8 @@ // along with this program. If not, see . use diesel::{Identifiable, Insertable, Queryable, Selectable}; +use diesel_json::Json; +use starkingdoms_common::PlayerSaveFile; #[derive(Queryable, Selectable, Insertable, Identifiable, Debug, PartialEq, Clone)] #[diesel(table_name = crate::schema::users)] @@ -24,4 +26,15 @@ pub struct User { pub username: String, pub password_hash: String, pub permission_level: i32, + pub latest_savefile: Option, +} + +#[derive(Queryable, Selectable, Insertable, Identifiable, Debug, PartialEq, Clone)] +#[diesel(table_name = crate::schema::savefiles)] +#[diesel(check_for_backend(diesel::pg::Pg))] +#[diesel(belongs_to(User))] +pub struct Savefile { + pub id: i64, + pub user_id: i64, + pub save_data: Json, } diff --git a/starkingdoms-api/src/routes/signup.rs b/starkingdoms-api/src/routes/signup.rs index 476fc34c03810c15402b8d9aff1c726e3be6cf81..0ebf2c73bbc222abc5b23b1dea25bea2a96b20e9 100644 --- a/starkingdoms-api/src/routes/signup.rs +++ b/starkingdoms-api/src/routes/signup.rs @@ -56,6 +56,7 @@ pub async fn signup_req( username: req.username.to_string(), password_hash: hash.to_string(), permission_level: 0, + latest_savefile: None }; handle_error!( diff --git a/starkingdoms-api/src/schema.rs b/starkingdoms-api/src/schema.rs index 9bf297e9a77766a3c0e7c2eecbfc798cde3bc635..15f2b0bc1b5f9a346f9c1beed7dfdbaf967037cc 100644 --- a/starkingdoms-api/src/schema.rs +++ b/starkingdoms-api/src/schema.rs @@ -1,10 +1,21 @@ // @generated automatically by Diesel CLI. +diesel::table! { + savefiles (id) { + id -> Int8, + user_id -> Int8, + save_data -> Jsonb, + } +} + diesel::table! { users (id) { id -> Int8, username -> Varchar, password_hash -> Varchar, permission_level -> Int4, + latest_savefile -> Nullable, } } + +diesel::allow_tables_to_appear_in_same_query!(savefiles, users,); diff --git a/starkingdoms-common/Cargo.toml b/starkingdoms-common/Cargo.toml new file mode 100644 index 0000000000000000000000000000000000000000..612a46fbc94e53fc5cf04628b995dfb7094e61a5 --- /dev/null +++ b/starkingdoms-common/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "starkingdoms-common" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +serde = { version = "1", features = ["derive"] } \ No newline at end of file diff --git a/starkingdoms-common/src/lib.rs b/starkingdoms-common/src/lib.rs new file mode 100644 index 0000000000000000000000000000000000000000..eec917455e61e733a4f3eb26d5fca245b119b5cb --- /dev/null +++ b/starkingdoms-common/src/lib.rs @@ -0,0 +1,7 @@ +use serde::{Deserialize, Serialize}; + +#[derive(Serialize, Deserialize, Debug, PartialEq, Clone)] +#[serde(tag = "version", content = "data")] +pub enum PlayerSaveFile { + V1 {} +} \ No newline at end of file