From c34b2391ebe7f13638e0a96520ce473f3368afd4 Mon Sep 17 00:00:00 2001 From: Matthias Lodner Date: Mon, 2 Feb 2026 03:41:56 +0100 Subject: [PATCH] Added settings to backend and frontend. --- common/src/models/mod.rs | 1 + common/src/models/settings.rs | 70 ++++++++++ frontend/app/app.vue | 4 + .../app/components/layout/customHeader.vue | 6 + frontend/app/components/settings/settings.vue | 132 ++++++++++++++++++ .../app/components/settings/settingsRow.vue | 110 +++++++++++++++ frontend/app/store/labelEditorStore.ts | 34 +++++ frontend/app/types/settings.ts | 11 ++ .../20260202004312_add_settings.sql | 12 ++ server/src/main.rs | 49 +++++++ 10 files changed, 429 insertions(+) create mode 100644 common/src/models/settings.rs create mode 100644 frontend/app/components/settings/settings.vue create mode 100644 frontend/app/components/settings/settingsRow.vue create mode 100644 frontend/app/types/settings.ts create mode 100644 server/migrations/20260202004312_add_settings.sql diff --git a/common/src/models/mod.rs b/common/src/models/mod.rs index 3b5b6fb..7b2594a 100644 --- a/common/src/models/mod.rs +++ b/common/src/models/mod.rs @@ -3,3 +3,4 @@ pub mod article; pub mod variant; pub mod unit; pub mod label; +pub mod settings; diff --git a/common/src/models/settings.rs b/common/src/models/settings.rs new file mode 100644 index 0000000..fada499 --- /dev/null +++ b/common/src/models/settings.rs @@ -0,0 +1,70 @@ +use log::{error, info}; +use serde::{Deserialize, Serialize}; +use sqlx::{Arguments, Decode, Encode, FromRow, PgPool, Row}; +use sqlx::postgres::{PgArguments, PgRow}; + +#[derive(Debug, Deserialize, Serialize, Clone, FromRow, Decode, Encode)] +pub struct Settings { + pub id: i64, + pub mhd: String, + pub bio: String, +} + +fn from_postgres_row_small(row: PgRow) -> Settings { + Settings { + id: row.get(0), + mhd: row.get(1), + bio: row.get(2), + } +} + +pub async fn load_settings(pool: &PgPool) -> Option { + let statement = format!( + "SELECT * FROM {}", + "settings", + ); + + let res = sqlx::query( + statement.as_str()) + .fetch_one(pool).await; + + match res { + Ok(record) => { + Some(from_postgres_row_small(record)) + } + Err(err) => { + error!("Error while loading settings."); + None + } + } +} + +pub async fn update_settings(settings: &Settings, pool: PgPool) -> Option { + let mut args = PgArguments::default(); + args.add(&settings.id); + args.add(&settings.mhd); + args.add(&settings.bio); + + let statement = format!( + "UPDATE {} SET mhd = $2, bio = $3 WHERE id = $1 RETURNING *", + "settings", + ); + + let res = sqlx::query_with( + statement.as_str(), + args) + .fetch_one(&pool).await; + + info!("{:#?}", res); + + match res { + Ok(record) => { + let label = from_postgres_row_small(record); + Some(label) + } + Err(err) => { + error!("Error while updating settings."); + None + } + } +} diff --git a/frontend/app/app.vue b/frontend/app/app.vue index f71cb4a..8eb0458 100644 --- a/frontend/app/app.vue +++ b/frontend/app/app.vue @@ -2,12 +2,16 @@ import { createApp } from 'vue' import { createPinia } from 'pinia' import App from './app.vue' + import {useLabelEditorStore} from "~/store/labelEditorStore"; const pinia = createPinia() const app = createApp(App) app.use(pinia) app.mount('#app') + + let store = useLabelEditorStore(); + await store.loadSettings();