|
|
|
|
@ -21,6 +21,7 @@ struct SettingsRow {
|
|
|
|
|
source_diversity_window: i32,
|
|
|
|
|
use_llm_for_source_links: bool,
|
|
|
|
|
use_llm_for_article_extraction: bool,
|
|
|
|
|
article_history_days: i32,
|
|
|
|
|
search_agent_behavior: String,
|
|
|
|
|
ai_provider: String,
|
|
|
|
|
ai_model: String,
|
|
|
|
|
@ -48,6 +49,7 @@ impl TryFrom<SettingsRow> for UserSettings {
|
|
|
|
|
source_diversity_window: row.source_diversity_window,
|
|
|
|
|
use_llm_for_source_links: row.use_llm_for_source_links,
|
|
|
|
|
use_llm_for_article_extraction: row.use_llm_for_article_extraction,
|
|
|
|
|
article_history_days: row.article_history_days,
|
|
|
|
|
search_agent_behavior: row.search_agent_behavior,
|
|
|
|
|
ai_provider: row.ai_provider,
|
|
|
|
|
ai_model: row.ai_model,
|
|
|
|
|
@ -74,10 +76,10 @@ pub async fn get_or_create_default(
|
|
|
|
|
|
|
|
|
|
let row = sqlx::query_as::<_, SettingsRow>(
|
|
|
|
|
r#"
|
|
|
|
|
INSERT INTO settings (user_id, theme, max_age_days, categories, max_items_per_category, search_agent_behavior, ai_provider, ai_model, ai_model_writing, rate_limit_max_requests, rate_limit_time_window_seconds, max_articles_per_source, source_diversity_window, use_llm_for_source_links, use_llm_for_article_extraction)
|
|
|
|
|
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15)
|
|
|
|
|
INSERT INTO settings (user_id, theme, max_age_days, categories, max_items_per_category, search_agent_behavior, ai_provider, ai_model, ai_model_writing, rate_limit_max_requests, rate_limit_time_window_seconds, max_articles_per_source, source_diversity_window, use_llm_for_source_links, use_llm_for_article_extraction, article_history_days)
|
|
|
|
|
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16)
|
|
|
|
|
ON CONFLICT (user_id) DO UPDATE SET user_id = settings.user_id
|
|
|
|
|
RETURNING user_id, theme, max_age_days, categories, max_items_per_category, search_agent_behavior, ai_provider, ai_model, ai_model_writing, rate_limit_max_requests, rate_limit_time_window_seconds, max_articles_per_source, source_diversity_window, use_llm_for_source_links, use_llm_for_article_extraction, updated_at
|
|
|
|
|
RETURNING user_id, theme, max_age_days, categories, max_items_per_category, search_agent_behavior, ai_provider, ai_model, ai_model_writing, rate_limit_max_requests, rate_limit_time_window_seconds, max_articles_per_source, source_diversity_window, use_llm_for_source_links, use_llm_for_article_extraction, article_history_days, updated_at
|
|
|
|
|
"#,
|
|
|
|
|
)
|
|
|
|
|
.bind(user_id)
|
|
|
|
|
@ -95,6 +97,7 @@ pub async fn get_or_create_default(
|
|
|
|
|
.bind(defaults.source_diversity_window)
|
|
|
|
|
.bind(defaults.use_llm_for_source_links)
|
|
|
|
|
.bind(defaults.use_llm_for_article_extraction)
|
|
|
|
|
.bind(defaults.article_history_days)
|
|
|
|
|
.fetch_one(pool)
|
|
|
|
|
.await?;
|
|
|
|
|
|
|
|
|
|
@ -113,8 +116,8 @@ pub async fn upsert(
|
|
|
|
|
|
|
|
|
|
let row = sqlx::query_as::<_, SettingsRow>(
|
|
|
|
|
r#"
|
|
|
|
|
INSERT INTO settings (user_id, theme, max_age_days, categories, max_items_per_category, search_agent_behavior, ai_provider, ai_model, ai_model_writing, rate_limit_max_requests, rate_limit_time_window_seconds, max_articles_per_source, source_diversity_window, use_llm_for_source_links, use_llm_for_article_extraction)
|
|
|
|
|
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15)
|
|
|
|
|
INSERT INTO settings (user_id, theme, max_age_days, categories, max_items_per_category, search_agent_behavior, ai_provider, ai_model, ai_model_writing, rate_limit_max_requests, rate_limit_time_window_seconds, max_articles_per_source, source_diversity_window, use_llm_for_source_links, use_llm_for_article_extraction, article_history_days)
|
|
|
|
|
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16)
|
|
|
|
|
ON CONFLICT (user_id) DO UPDATE SET
|
|
|
|
|
theme = EXCLUDED.theme,
|
|
|
|
|
max_age_days = EXCLUDED.max_age_days,
|
|
|
|
|
@ -130,8 +133,9 @@ pub async fn upsert(
|
|
|
|
|
source_diversity_window = EXCLUDED.source_diversity_window,
|
|
|
|
|
use_llm_for_source_links = EXCLUDED.use_llm_for_source_links,
|
|
|
|
|
use_llm_for_article_extraction = EXCLUDED.use_llm_for_article_extraction,
|
|
|
|
|
article_history_days = EXCLUDED.article_history_days,
|
|
|
|
|
updated_at = now()
|
|
|
|
|
RETURNING user_id, theme, max_age_days, categories, max_items_per_category, search_agent_behavior, ai_provider, ai_model, ai_model_writing, rate_limit_max_requests, rate_limit_time_window_seconds, max_articles_per_source, source_diversity_window, use_llm_for_source_links, use_llm_for_article_extraction, updated_at
|
|
|
|
|
RETURNING user_id, theme, max_age_days, categories, max_items_per_category, search_agent_behavior, ai_provider, ai_model, ai_model_writing, rate_limit_max_requests, rate_limit_time_window_seconds, max_articles_per_source, source_diversity_window, use_llm_for_source_links, use_llm_for_article_extraction, article_history_days, updated_at
|
|
|
|
|
"#,
|
|
|
|
|
)
|
|
|
|
|
.bind(user_id)
|
|
|
|
|
@ -149,6 +153,7 @@ pub async fn upsert(
|
|
|
|
|
.bind(req.source_diversity_window)
|
|
|
|
|
.bind(req.use_llm_for_source_links)
|
|
|
|
|
.bind(req.use_llm_for_article_extraction)
|
|
|
|
|
.bind(req.article_history_days)
|
|
|
|
|
.fetch_one(pool)
|
|
|
|
|
.await?;
|
|
|
|
|
|
|
|
|
|
|