From a3866b0af2c02561900d908be54e839e3dc68e35 Mon Sep 17 00:00:00 2001 From: Philippe Loctaux Date: Sun, 5 Mar 2023 23:33:10 +0100 Subject: [PATCH] settings: store id of first admin user --- ...230305181020_settings_store_first_admin.down.sql | 2 ++ ...20230305181020_settings_store_first_admin.up.sql | 2 ++ crates/database/src/tables/settings.rs | 13 +++++++++++++ crates/settings/Cargo.toml | 1 + crates/settings/src/database.rs | 7 +++++++ 5 files changed, 25 insertions(+) create mode 100644 crates/database/migrations/20230305181020_settings_store_first_admin.down.sql create mode 100644 crates/database/migrations/20230305181020_settings_store_first_admin.up.sql diff --git a/crates/database/migrations/20230305181020_settings_store_first_admin.down.sql b/crates/database/migrations/20230305181020_settings_store_first_admin.down.sql new file mode 100644 index 0000000..5082b2d --- /dev/null +++ b/crates/database/migrations/20230305181020_settings_store_first_admin.down.sql @@ -0,0 +1,2 @@ +alter table settings + drop column first_admin; diff --git a/crates/database/migrations/20230305181020_settings_store_first_admin.up.sql b/crates/database/migrations/20230305181020_settings_store_first_admin.up.sql new file mode 100644 index 0000000..20361d4 --- /dev/null +++ b/crates/database/migrations/20230305181020_settings_store_first_admin.up.sql @@ -0,0 +1,2 @@ +alter table settings + add column first_admin TEXT references users (id); diff --git a/crates/database/src/tables/settings.rs b/crates/database/src/tables/settings.rs index a7a5709..b9f6265 100644 --- a/crates/database/src/tables/settings.rs +++ b/crates/database/src/tables/settings.rs @@ -54,4 +54,17 @@ impl Settings { Ok((query.rows_affected() == 1).then_some(())) } + + pub async fn set_first_admin( + conn: impl SqliteExecutor<'_>, + id: &str, + ) -> Result, Error> { + let query: SqliteQueryResult = + sqlx::query_file!("queries/settings/set_first_admin.sql", id) + .execute(conn) + .await + .map_err(handle_error)?; + + Ok((query.rows_affected() == 1).then_some(())) + } } diff --git a/crates/settings/Cargo.toml b/crates/settings/Cargo.toml index 55542f7..9db2b5f 100644 --- a/crates/settings/Cargo.toml +++ b/crates/settings/Cargo.toml @@ -5,5 +5,6 @@ edition = "2021" [dependencies] database = { path = "../database" } +id = { path = "../id" } thiserror = { workspace = true } chrono = { workspace = true } \ No newline at end of file diff --git a/crates/settings/src/database.rs b/crates/settings/src/database.rs index f6afda6..82fff88 100644 --- a/crates/settings/src/database.rs +++ b/crates/settings/src/database.rs @@ -2,6 +2,7 @@ use crate::error::Error; use crate::Settings; use database::sqlx::SqliteExecutor; use database::Settings as DatabaseSettings; +use id::UserID; const DEFAULT_BUSINESS_NAME: &str = "ezidam"; pub const DEFAULT_BUSINESS_LOGO: &[u8] = include_bytes!("../../../logo/ezidam.png"); @@ -48,4 +49,10 @@ impl Settings { Ok(()) } + + pub async fn set_first_admin(conn: impl SqliteExecutor<'_>, id: &UserID) -> Result<(), Error> { + DatabaseSettings::set_first_admin(conn, &id.0).await?; + + Ok(()) + } }