1use serde::{Deserialize, Serialize};
4
5use super::app::{AppCtx, AppError};
6
7#[qubit::ts]
10#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
11pub struct UserSettings {
12 #[serde(rename = "llmEnabled")]
14 pub llm_enabled: bool,
15}
16
17pub async fn get_active_user_settings(ctx: AppCtx) -> Result<UserSettings, AppError> {
19 let Some(user) = ctx.user else {
20 return Err(AppError::Unauthorized);
21 };
22
23 let settings = sqlx::query_as!(
24 UserSettings,
25 "SELECT settings_llm_enabled AS llm_enabled FROM users WHERE id = $1",
26 user.user_id,
27 )
28 .fetch_one(&ctx.state.db)
29 .await?;
30
31 Ok(settings)
32}
33
34pub async fn set_active_user_settings(ctx: AppCtx, settings: UserSettings) -> Result<(), AppError> {
36 let Some(user) = ctx.user else {
37 return Err(AppError::Unauthorized);
38 };
39
40 let result = sqlx::query!(
41 "UPDATE users SET settings_llm_enabled = $2 WHERE id = $1",
42 user.user_id,
43 settings.llm_enabled,
44 )
45 .execute(&ctx.state.db)
46 .await?;
47
48 if result.rows_affected() == 0 {
49 return Err(AppError::NotFound("active user".into()));
50 }
51
52 Ok(())
53}