feat: add admin work visibility controls

This commit is contained in:
kdletters
2026-05-28 00:49:45 +08:00
parent 8e96c8a67c
commit dbbd48083a
38 changed files with 1807 additions and 89 deletions

View File

@@ -18,6 +18,61 @@ impl From<module_runtime::CreationEntryTypeAdminUpsertInput> for CreationEntryTy
}
}
impl From<module_runtime::AdminWorkVisibilityListInput> for AdminWorkVisibilityListInput {
fn from(input: module_runtime::AdminWorkVisibilityListInput) -> Self {
Self {
admin_user_id: input.admin_user_id,
}
}
}
impl From<module_runtime::AdminWorkVisibilityUpdateInput> for AdminWorkVisibilityUpdateInput {
fn from(input: module_runtime::AdminWorkVisibilityUpdateInput) -> Self {
Self {
admin_user_id: input.admin_user_id,
source_type: input.source_type,
profile_id: input.profile_id,
visible: input.visible,
}
}
}
pub(crate) fn build_admin_work_visibility_list_input(
admin_user_id: String,
) -> Result<module_runtime::AdminWorkVisibilityListInput, String> {
let admin_user_id = admin_user_id.trim().to_string();
if admin_user_id.is_empty() {
return Err("adminUserId 不能为空".to_string());
}
Ok(module_runtime::AdminWorkVisibilityListInput { admin_user_id })
}
pub(crate) fn build_admin_work_visibility_update_input(
admin_user_id: String,
source_type: String,
profile_id: String,
visible: bool,
) -> Result<module_runtime::AdminWorkVisibilityUpdateInput, String> {
let admin_user_id = admin_user_id.trim().to_string();
if admin_user_id.is_empty() {
return Err("adminUserId 不能为空".to_string());
}
let source_type = source_type.trim().to_string();
if source_type.is_empty() {
return Err("sourceType 不能为空".to_string());
}
let profile_id = profile_id.trim().to_string();
if profile_id.is_empty() {
return Err("profileId 不能为空".to_string());
}
Ok(module_runtime::AdminWorkVisibilityUpdateInput {
admin_user_id,
source_type,
profile_id,
visible,
})
}
impl From<module_runtime::RuntimeSettingGetInput> for RuntimeSettingGetInput {
fn from(input: module_runtime::RuntimeSettingGetInput) -> Self {
Self {
@@ -114,6 +169,7 @@ impl From<module_runtime::RuntimeTrackingEventInput> for RuntimeTrackingEventInp
pub type CreationEntryConfigRecord =
shared_contracts::creation_entry_config::CreationEntryConfigResponse;
pub type AdminWorkVisibilityRecord = shared_contracts::admin::AdminWorkVisibilityEntryPayload;
pub(crate) fn map_creation_entry_config_procedure_result(
result: CreationEntryConfigProcedureResult,
@@ -131,6 +187,51 @@ pub(crate) fn map_creation_entry_config_procedure_result(
))
}
pub(crate) fn map_admin_work_visibility_list_procedure_result(
result: AdminWorkVisibilityListProcedureResult,
) -> Result<Vec<AdminWorkVisibilityRecord>, SpacetimeClientError> {
if !result.ok {
return Err(SpacetimeClientError::procedure_failed(result.error_message));
}
Ok(result
.entries
.into_iter()
.map(map_admin_work_visibility_snapshot)
.collect())
}
pub(crate) fn map_admin_work_visibility_procedure_result(
result: AdminWorkVisibilityProcedureResult,
) -> Result<AdminWorkVisibilityRecord, SpacetimeClientError> {
if !result.ok {
return Err(SpacetimeClientError::procedure_failed(result.error_message));
}
result
.record
.map(map_admin_work_visibility_snapshot)
.ok_or_else(|| SpacetimeClientError::missing_snapshot("后台作品可见性快照"))
}
fn map_admin_work_visibility_snapshot(
snapshot: AdminWorkVisibilitySnapshot,
) -> AdminWorkVisibilityRecord {
AdminWorkVisibilityRecord {
source_type: snapshot.source_type,
work_id: snapshot.work_id,
profile_id: snapshot.profile_id,
source_session_id: snapshot.source_session_id,
public_work_code: snapshot.public_work_code,
owner_user_id: snapshot.owner_user_id,
author_display_name: snapshot.author_display_name,
title: snapshot.title,
subtitle: snapshot.subtitle,
cover_image_src: snapshot.cover_image_src,
visible: snapshot.visible,
published_at_micros: snapshot.published_at_micros,
updated_at_micros: snapshot.updated_at_micros,
}
}
pub(crate) fn build_creation_entry_config_record_from_rows(
header: CreationEntryConfig,
mut creation_types: Vec<CreationEntryTypeConfig>,