From a85c1431c87c0239f13218d2be9e019b3943cef2 Mon Sep 17 00:00:00 2001 From: Philippe Loctaux
Date: Mon, 27 Feb 2023 16:17:51 +0100
Subject: [PATCH] added settings crate, creating settings on web startup
---
Cargo.lock | 40 +++++++++++++++---
crates/ezidam/Cargo.toml | 3 +-
crates/ezidam/src/database.rs | 19 ++++++++-
crates/settings/Cargo.toml | 9 +++++
crates/settings/src/lib.rs | 74 ++++++++++++++++++++++++++++++++++
logo/ezidam.png | Bin 0 -> 5245 bytes
logo/readme.md | 10 +++++
7 files changed, 148 insertions(+), 7 deletions(-)
create mode 100644 crates/settings/Cargo.toml
create mode 100644 crates/settings/src/lib.rs
create mode 100644 logo/ezidam.png
create mode 100644 logo/readme.md
diff --git a/Cargo.lock b/Cargo.lock
index e85e215..b879652 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -220,8 +220,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f"
dependencies = [
"iana-time-zone",
+ "js-sys",
"num-integer",
"num-traits",
+ "time 0.1.45",
+ "wasm-bindgen",
"winapi 0.3.9",
]
@@ -281,7 +284,7 @@ dependencies = [
"rand",
"sha2",
"subtle",
- "time",
+ "time 0.3.20",
"version_check",
]
@@ -523,6 +526,7 @@ dependencies = [
"rocket",
"rocket_db_pools",
"rocket_dyn_templates",
+ "settings",
]
[[package]]
@@ -740,7 +744,7 @@ checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
dependencies = [
"cfg-if 1.0.0",
"libc",
- "wasi",
+ "wasi 0.11.0+wasi-snapshot-preview1",
]
[[package]]
@@ -1238,7 +1242,7 @@ checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9"
dependencies = [
"libc",
"log",
- "wasi",
+ "wasi 0.11.0+wasi-snapshot-preview1",
"windows-sys 0.45.0",
]
@@ -1782,7 +1786,7 @@ dependencies = [
"serde",
"state",
"tempfile",
- "time",
+ "time 0.3.20",
"tokio",
"tokio-stream",
"tokio-util",
@@ -1864,7 +1868,7 @@ dependencies = [
"smallvec",
"stable-pattern",
"state",
- "time",
+ "time 0.3.20",
"tokio",
"uncased",
]
@@ -1976,6 +1980,15 @@ dependencies = [
"serde",
]
+[[package]]
+name = "settings"
+version = "0.0.0"
+dependencies = [
+ "chrono",
+ "database",
+ "thiserror",
+]
+
[[package]]
name = "sha2"
version = "0.10.6"
@@ -2280,6 +2293,17 @@ dependencies = [
"once_cell",
]
+[[package]]
+name = "time"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
+dependencies = [
+ "libc",
+ "wasi 0.10.0+wasi-snapshot-preview1",
+ "winapi 0.3.9",
+]
+
[[package]]
name = "time"
version = "0.3.20"
@@ -2663,6 +2687,12 @@ dependencies = [
"try-lock",
]
+[[package]]
+name = "wasi"
+version = "0.10.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
+
[[package]]
name = "wasi"
version = "0.11.0+wasi-snapshot-preview1"
diff --git a/crates/ezidam/Cargo.toml b/crates/ezidam/Cargo.toml
index 8fb2050..4449812 100644
--- a/crates/ezidam/Cargo.toml
+++ b/crates/ezidam/Cargo.toml
@@ -10,4 +10,5 @@ rocket_dyn_templates = { version = "0.1.0-rc.2", features = ["tera"] }
infer = { version = "0.12.0", default-features = false }
# local crates
-database_pool = { path = "../database_pool" }
\ No newline at end of file
+database_pool = { path = "../database_pool" }
+settings = { path = "../settings" }
diff --git a/crates/ezidam/src/database.rs b/crates/ezidam/src/database.rs
index 03a6b1f..b2d8272 100644
--- a/crates/ezidam/src/database.rs
+++ b/crates/ezidam/src/database.rs
@@ -2,6 +2,7 @@ use database_pool::run_migrations;
use rocket::fairing::AdHoc;
use rocket::{error, fairing, info, Build, Rocket};
use rocket_db_pools::{sqlx, Database as RocketDatabase};
+use settings::Settings;
#[derive(RocketDatabase)]
#[database("ezidam")]
@@ -25,10 +26,26 @@ impl Database {
match run_migrations(&db.0).await {
Ok(()) => {
info!("Migrations ran successfully");
- Ok(rocket)
}
Err(e) => {
error!("Failed to run migrations: {}", e);
+ return Err(rocket);
+ }
+ }
+
+ // Initialize settings
+ match Settings::init(&db.0).await {
+ Ok(insertion) => {
+ if insertion.is_some() {
+ // This should happen only once in the lifetime of the database
+ info!("Created settings in database");
+ } else {
+ info!("Found existing settings in database");
+ }
+ Ok(rocket)
+ }
+ Err(e) => {
+ error!("Failed to interact with settings: {}", e);
Err(rocket)
}
}
diff --git a/crates/settings/Cargo.toml b/crates/settings/Cargo.toml
new file mode 100644
index 0000000..55542f7
--- /dev/null
+++ b/crates/settings/Cargo.toml
@@ -0,0 +1,9 @@
+[package]
+name = "settings"
+version = "0.0.0"
+edition = "2021"
+
+[dependencies]
+database = { path = "../database" }
+thiserror = { workspace = true }
+chrono = { workspace = true }
\ No newline at end of file
diff --git a/crates/settings/src/lib.rs b/crates/settings/src/lib.rs
new file mode 100644
index 0000000..ef95367
--- /dev/null
+++ b/crates/settings/src/lib.rs
@@ -0,0 +1,74 @@
+use chrono::{DateTime, Utc};
+use database::sqlx::SqliteExecutor;
+use database::Settings as DatabaseSettings;
+
+// error
+#[derive(thiserror::Error)]
+// the rest
+#[derive(Debug)]
+pub enum Error {
+ #[error("Database: {0}")]
+ Database(#[from] database::Error),
+}
+
+// the rest
+#[derive(Debug)]
+pub struct Settings {
+ created_at: DateTime