@ -23,6 +23,7 @@ struct SettingsRow {
article_history_days : i32 ,
batch_size : i32 ,
summary_length : i32 ,
source_extraction_window : i32 ,
search_agent_behavior : String ,
ai_provider : String ,
ai_model : String ,
@ -52,6 +53,7 @@ impl TryFrom<SettingsRow> for UserSettings {
article_history_days : row . article_history_days ,
batch_size : row . batch_size ,
summary_length : row . summary_length ,
source_extraction_window : row . source_extraction_window ,
search_agent_behavior : row . search_agent_behavior ,
ai_provider : row . ai_provider ,
ai_model : row . ai_model ,
@ -78,10 +80,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_websearch , rate_limit_max_requests , rate_limit_time_window_seconds , max_articles_per_source , use_llm_for_source_links , use_brave_search , article_history_days , batch_size , summary_length )
VALUES ( $ 1 , $ 2 , $ 3 , $ 4 , $ 5 , $ 6 , $ 7 , $ 8 , $ 9 , $ 10 , $ 11 , $ 12 , $ 13 , $ 14 , $ 15 , $ 16 , $ 17 )
INSERT INTO settings ( user_id , theme , max_age_days , categories , max_items_per_category , search_agent_behavior , ai_provider , ai_model , ai_model_websearch , rate_limit_max_requests , rate_limit_time_window_seconds , max_articles_per_source , use_llm_for_source_links , use_brave_search , article_history_days , batch_size , summary_length , source_extraction_window )
VALUES ( $ 1 , $ 2 , $ 3 , $ 4 , $ 5 , $ 6 , $ 7 , $ 8 , $ 9 , $ 10 , $ 11 , $ 12 , $ 13 , $ 14 , $ 15 , $ 16 , $ 17 , $ 18 )
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_websearch , rate_limit_max_requests , rate_limit_time_window_seconds , max_articles_per_source , use_llm_for_source_links , use_brave_search , article_history_days , batch_size , summary_length , updated_at
RETURNING user_id , theme , max_age_days , categories , max_items_per_category , search_agent_behavior , ai_provider , ai_model , ai_model_websearch , rate_limit_max_requests , rate_limit_time_window_seconds , max_articles_per_source , use_llm_for_source_links , use_brave_search , article_history_days , batch_size , summary_length , source_extraction_window, updated_at
" #,
)
. bind ( user_id )
@ -101,6 +103,7 @@ pub async fn get_or_create_default(
. bind ( defaults . article_history_days )
. bind ( defaults . batch_size )
. bind ( defaults . summary_length )
. bind ( defaults . source_extraction_window )
. fetch_one ( pool )
. await ? ;
@ -119,8 +122,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_websearch , rate_limit_max_requests , rate_limit_time_window_seconds , max_articles_per_source , use_llm_for_source_links , use_brave_search , article_history_days , batch_size , summary_length )
VALUES ( $ 1 , $ 2 , $ 3 , $ 4 , $ 5 , $ 6 , $ 7 , $ 8 , $ 9 , $ 10 , $ 11 , $ 12 , $ 13 , $ 14 , $ 15 , $ 16 , $ 17 )
INSERT INTO settings ( user_id , theme , max_age_days , categories , max_items_per_category , search_agent_behavior , ai_provider , ai_model , ai_model_websearch , rate_limit_max_requests , rate_limit_time_window_seconds , max_articles_per_source , use_llm_for_source_links , use_brave_search , article_history_days , batch_size , summary_length , source_extraction_window )
VALUES ( $ 1 , $ 2 , $ 3 , $ 4 , $ 5 , $ 6 , $ 7 , $ 8 , $ 9 , $ 10 , $ 11 , $ 12 , $ 13 , $ 14 , $ 15 , $ 16 , $ 17 , $ 18 )
ON CONFLICT ( user_id ) DO UPDATE SET
theme = EXCLUDED . theme ,
max_age_days = EXCLUDED . max_age_days ,
@ -138,8 +141,9 @@ pub async fn upsert(
article_history_days = EXCLUDED . article_history_days ,
batch_size = EXCLUDED . batch_size ,
summary_length = EXCLUDED . summary_length ,
source_extraction_window = EXCLUDED . source_extraction_window ,
updated_at = now ( )
RETURNING user_id , theme , max_age_days , categories , max_items_per_category , search_agent_behavior , ai_provider , ai_model , ai_model_websearch , rate_limit_max_requests , rate_limit_time_window_seconds , max_articles_per_source , use_llm_for_source_links , use_brave_search , article_history_days , batch_size , summary_length , updated_at
RETURNING user_id , theme , max_age_days , categories , max_items_per_category , search_agent_behavior , ai_provider , ai_model , ai_model_websearch , rate_limit_max_requests , rate_limit_time_window_seconds , max_articles_per_source , use_llm_for_source_links , use_brave_search , article_history_days , batch_size , summary_length , source_extraction_window, updated_at
" #,
)
. bind ( user_id )
@ -159,6 +163,7 @@ pub async fn upsert(
. bind ( req . article_history_days )
. bind ( req . batch_size )
. bind ( req . summary_length )
. bind ( req . source_extraction_window )
. fetch_one ( pool )
. await ? ;