1
This commit is contained in:
54
server-rs/crates/api-server/src/work_author.rs
Normal file
54
server-rs/crates/api-server/src/work_author.rs
Normal file
@@ -0,0 +1,54 @@
|
||||
use module_auth::AuthUser;
|
||||
|
||||
use crate::state::AppState;
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq)]
|
||||
pub struct WorkAuthorSummary {
|
||||
pub display_name: String,
|
||||
pub public_user_code: Option<String>,
|
||||
}
|
||||
|
||||
/// 中文注释:作品作者的真相源是 owner_user_id;历史昵称字段只作为账号资料不可读时的兼容回退。
|
||||
pub fn resolve_work_author_by_user_id(
|
||||
state: &AppState,
|
||||
owner_user_id: &str,
|
||||
fallback_display_name: Option<&str>,
|
||||
fallback_public_user_code: Option<&str>,
|
||||
) -> WorkAuthorSummary {
|
||||
let fallback_display_name =
|
||||
normalize_optional_text(fallback_display_name).unwrap_or_else(|| "玩家".to_string());
|
||||
let fallback_public_user_code = normalize_optional_text(fallback_public_user_code);
|
||||
|
||||
let Some(owner_user_id) = normalize_optional_text(Some(owner_user_id)) else {
|
||||
return WorkAuthorSummary {
|
||||
display_name: fallback_display_name,
|
||||
public_user_code: fallback_public_user_code,
|
||||
};
|
||||
};
|
||||
|
||||
match state.auth_user_service().get_user_by_id(&owner_user_id) {
|
||||
Ok(Some(user)) => map_auth_user_to_work_author_summary(user, fallback_display_name),
|
||||
Ok(None) | Err(_) => WorkAuthorSummary {
|
||||
display_name: fallback_display_name,
|
||||
public_user_code: fallback_public_user_code,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
fn map_auth_user_to_work_author_summary(
|
||||
user: AuthUser,
|
||||
fallback_display_name: String,
|
||||
) -> WorkAuthorSummary {
|
||||
WorkAuthorSummary {
|
||||
display_name: normalize_optional_text(Some(user.display_name.as_str()))
|
||||
.unwrap_or(fallback_display_name),
|
||||
public_user_code: normalize_optional_text(Some(user.public_user_code.as_str())),
|
||||
}
|
||||
}
|
||||
|
||||
fn normalize_optional_text(value: Option<&str>) -> Option<String> {
|
||||
value
|
||||
.map(str::trim)
|
||||
.filter(|value| !value.is_empty())
|
||||
.map(ToOwned::to_owned)
|
||||
}
|
||||
Reference in New Issue
Block a user