M Cargo.lock => Cargo.lock +37 -0
@@ 1594,6 1594,7 @@ dependencies = [
"byteorder",
"diesel_derives",
"itoa",
+ "pq-sys",
"serde_json",
]
@@ 1625,6 1626,17 @@ dependencies = [
]
[[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"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ 3006,6 3018,15 @@ 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"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ 3477,6 3498,7 @@ dependencies = [
"bb8",
"diesel",
"diesel-async",
+ "diesel_json",
"diesel_migrations",
"env_logger",
"hmac",
@@ 3488,10 3510,18 @@ 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"
dependencies = [
@@ 3501,6 3531,7 @@ dependencies = [
"rand",
"serde",
"serde_json",
+ "starkingdoms-common",
"tracing-subscriber",
]
@@ 3941,6 3972,12 @@ 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"
source = "registry+https://github.com/rust-lang/crates.io-index"
M Cargo.toml => Cargo.toml +2 -1
@@ 1,6 1,7 @@
[workspace]
members = [
"server",
- "starkingdoms-api"
+ "starkingdoms-api",
+ "starkingdoms-common"
]
resolver = "2"
M server/Cargo.toml => server/Cargo.toml +1 -0
@@ 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
M starkingdoms-api/Cargo.toml => starkingdoms-api/Cargo.toml +3 -1
@@ 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
A starkingdoms-api/migrations/2023-11-30-181014_create_table_savefiles/down.sql => starkingdoms-api/migrations/2023-11-30-181014_create_table_savefiles/down.sql +1 -0
@@ 0,0 1,1 @@
+DROP TABLE savefiles;<
\ No newline at end of file
A starkingdoms-api/migrations/2023-11-30-181014_create_table_savefiles/up.sql => starkingdoms-api/migrations/2023-11-30-181014_create_table_savefiles/up.sql +5 -0
@@ 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
A starkingdoms-api/migrations/2023-11-30-183150_alter_table_users_add_latest_savefile/down.sql => starkingdoms-api/migrations/2023-11-30-183150_alter_table_users_add_latest_savefile/down.sql +1 -0
@@ 0,0 1,1 @@
+ALTER TABLE users DROP COLUMN latest_savefile;<
\ No newline at end of file
A starkingdoms-api/migrations/2023-11-30-183150_alter_table_users_add_latest_savefile/up.sql => starkingdoms-api/migrations/2023-11-30-183150_alter_table_users_add_latest_savefile/up.sql +1 -0
@@ 0,0 1,1 @@
+ALTER TABLE users ADD COLUMN latest_savefile BIGINT NULL REFERENCES savefiles(id);<
\ No newline at end of file
M starkingdoms-api/src/models.rs => starkingdoms-api/src/models.rs +13 -0
@@ 15,6 15,8 @@
// along with this program. If not, see <https://www.gnu.org/licenses/>.
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<i64>,
+}
+
+#[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<PlayerSaveFile>,
}
M starkingdoms-api/src/routes/signup.rs => starkingdoms-api/src/routes/signup.rs +1 -0
@@ 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!(
M starkingdoms-api/src/schema.rs => starkingdoms-api/src/schema.rs +11 -0
@@ 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<Int8>,
}
}
+
+diesel::allow_tables_to_appear_in_same_query!(savefiles, users,);
A starkingdoms-common/Cargo.toml => starkingdoms-common/Cargo.toml +9 -0
@@ 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
A starkingdoms-common/src/lib.rs => starkingdoms-common/src/lib.rs +7 -0
@@ 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