71 lines
2 KiB
Rust
71 lines
2 KiB
Rust
use leptos::*;
|
|
use leptos_router::*;
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
use crate::app::components::{svgs::*, FormControl};
|
|
|
|
#[derive(PartialEq, Debug, Clone, Serialize, Deserialize, sqlx::FromRow)]
|
|
pub struct BackendSettings {
|
|
version: i64, // auto-increments, the current settings are the highest version
|
|
model_dir: String,
|
|
default_model: String,
|
|
created_at: chrono::NaiveDateTime,
|
|
}
|
|
|
|
/// Returns the initial default directory for model files. ($PWD/models)
|
|
#[server]
|
|
async fn default_model_dir() -> Result<String, ServerFnError> {
|
|
let pwd = std::env::current_dir()?.to_string_lossy().to_string();
|
|
let default_dir = format!("{}/models", pwd);
|
|
Ok(default_dir)
|
|
}
|
|
|
|
/// Fetches the latest backend settings from the database.
|
|
#[server]
|
|
async fn load_backend_settings() -> Result<BackendSettings, ServerFnError> {
|
|
use crate::server::pool;
|
|
|
|
tracing::debug!(msg = "Load settings");
|
|
|
|
let pool = pool()?;
|
|
|
|
let settings = sqlx::query_as!(
|
|
BackendSettings,
|
|
"SELECT version, model_dir, default_model, created_at FROM settings ORDER BY version DESC \
|
|
LIMIT 1"
|
|
)
|
|
.fetch_optional(&pool)
|
|
.await?;
|
|
|
|
match settings {
|
|
Some(settings) => Ok(settings),
|
|
None => Err(ServerFnError::ServerError("Settings not found".to_string())),
|
|
}
|
|
}
|
|
|
|
/// Updates the backend settings with new model directory and default model.
|
|
#[server(UpdateSettings)]
|
|
async fn update_settings(model_dir: String, default_model: String) -> Result<(), ServerFnError> {
|
|
use crate::server::pool;
|
|
|
|
tracing::debug!(msg = "Updating settings", ?model_dir, ?default_model);
|
|
|
|
let pool = pool()?;
|
|
|
|
let result = {
|
|
sqlx_macros::expand_query!(
|
|
source = "INSERT INTO settings (model_dir, default_model) VALUES (?, ?)",
|
|
args = [model_dir, default_model,]
|
|
)
|
|
}
|
|
.execute(&pool)
|
|
.await?;
|
|
|
|
if result.rows_affected() == 0 {
|
|
return Err(ServerFnError::ServerError(
|
|
"Failed to create new settings".to_string(),
|
|
));
|
|
}
|
|
|
|
Ok(())
|
|
}
|