Add default_search to user_settings
Some checks are pending
Build docker image / Build-Docker-Image (push) Waiting to run
rust-clippy analyze / Run rust-clippy analyzing (push) Waiting to run

Add migration to add a nullable VARCHAR(32) column with a CHECK
constraint restricting values to book, author, series, translator.
Update SQLx query artifacts, handlers, and serializers to read and
write the new field.
This commit is contained in:
2026-02-16 21:09:56 +01:00
parent 54d47b2d63
commit 963f9ae6cb
8 changed files with 63 additions and 23 deletions

View File

@@ -1,6 +1,10 @@
pub mod serializers;
pub mod utils;
use self::{
serializers::{CreateOrUpdateUserData, SimpleUser, UserDetail, UserLanguage},
utils::update_languages,
};
use axum::{
extract::{Path, Query},
http::StatusCode,
@@ -8,12 +12,6 @@ use axum::{
routing::{get, post},
Json, Router,
};
use serializers::SimpleUser;
use self::{
serializers::{CreateOrUpdateUserData, UserDetail, UserLanguage},
utils::update_languages,
};
use super::{
pagination::{Page, Pagination},
@@ -38,6 +36,7 @@ async fn get_users(pagination: Query<Pagination>, db: Database) -> impl IntoResp
user_settings.first_name,
user_settings.username,
user_settings.source,
user_settings.default_search,
COALESCE(
ARRAY_AGG(ROW(
languages.id,
@@ -75,6 +74,7 @@ async fn get_user(Path(user_id): Path<i64>, db: Database) -> impl IntoResponse {
user_settings.first_name,
user_settings.username,
user_settings.source,
user_settings.default_search,
COALESCE(
ARRAY_AGG(ROW(
languages.id,
@@ -109,17 +109,18 @@ async fn create_or_update_user(
let user = sqlx::query_as!(
SimpleUser,
r#"
INSERT INTO user_settings (user_id, last_name, first_name, username, source)
VALUES ($1, $2, $3, $4, $5)
INSERT INTO user_settings (user_id, last_name, first_name, username, source, default_search)
VALUES ($1, $2, $3, $4, $5, $6)
ON CONFLICT (user_id) DO UPDATE
SET last_name = $2, first_name = $3, username = $4, source = $5
RETURNING id, user_id, last_name, first_name, username, source
SET last_name = $2, first_name = $3, username = $4, source = $5, default_search = $6
RETURNING id, user_id, last_name, first_name, username, source, default_search
"#,
data.user_id,
data.last_name,
data.first_name,
data.username,
data.source,
data.default_search,
)
.fetch_one(&db.0)
.await
@@ -137,6 +138,7 @@ async fn create_or_update_user(
user_settings.first_name,
user_settings.username,
user_settings.source,
user_settings.default_search,
COALESCE(
ARRAY_AGG(ROW(
languages.id,
@@ -164,7 +166,7 @@ async fn update_activity(Path(user_id): Path<i64>, db: Database) -> impl IntoRes
let user = sqlx::query_as!(
SimpleUser,
r#"
SELECT id, user_id, last_name, first_name, username, source
SELECT id, user_id, last_name, first_name, username, source, default_search
FROM user_settings
WHERE user_id = $1
"#,

View File

@@ -16,6 +16,7 @@ pub struct SimpleUser {
pub first_name: String,
pub username: String,
pub source: String,
pub default_search: Option<String>,
}
#[derive(sqlx::FromRow, Serialize)]
@@ -26,6 +27,7 @@ pub struct UserDetail {
pub first_name: String,
pub username: String,
pub source: String,
pub default_search: Option<String>,
pub allowed_langs: Vec<UserLanguage>,
}
@@ -36,5 +38,6 @@ pub struct CreateOrUpdateUserData {
pub first_name: String,
pub username: String,
pub source: String,
pub default_search: Option<String>,
pub allowed_langs: Vec<String>,
}