use axum::extract::Extension;
use axum::response::IntoResponse;
use axum::Json;
use dialtone_common::rest::users::user_exchanges::PutUserPreferences;
use sqlx::{Pool, Postgres};
use crate::authz::authz_user::authz_acct_or_useradmin;
use crate::{ok_failure, ok_success};
use dialtone_sqlx::db::user_principal::update_prefs::update_user_prefs;
use crate::response::response_error::ResponseError;
use crate::start_server::{Claims, SharedState};
pub async fn put_user_prefs_handler(
claims: Claims,
Json(request): Json<PutUserPreferences>,
Extension(pool): Extension<Pool<Postgres>>,
Extension(state): Extension<SharedState>,
) -> Result<impl IntoResponse, ResponseError> {
authz_acct_or_useradmin(&request.acct, &claims, &state).await?;
let changed = update_user_prefs(&pool, &request.acct, request.preferences).await?;
if changed.is_some() {
ok_success!()
} else {
ok_failure!()
}
}