Files
Genarrative/server-rs/crates/spacetime-client/src/mapper/auth.rs
T
kdletters 47083bfe05 切断认证快照同步路径
删除 auth_store_snapshot 表和旧 JSON 快照 procedure。

改用 AuthStoreProjectionView 同步 user_account、auth_identity 和 refresh_session。

让 auth 服务从 user_account 投影恢复内存工作集。

同步生成绑定、schema guard 和后端架构文档。
2026-07-01 19:07:21 +08:00

147 lines
5.8 KiB
Rust

use super::*;
pub(crate) fn map_auth_store_projection_procedure_result(
result: crate::module_bindings::AuthStoreProjectionProcedureResult,
) -> Result<module_auth::AuthStoreProjectionView, SpacetimeClientError> {
if !result.ok {
return Err(SpacetimeClientError::procedure_failed(result.error_message));
}
result
.record
.map(map_auth_store_projection_view)
.ok_or_else(|| SpacetimeClientError::missing_snapshot("认证投影"))
}
pub(crate) fn map_auth_store_projection_sync_procedure_result(
result: crate::module_bindings::AuthStoreProjectionSyncProcedureResult,
) -> Result<AuthStoreProjectionSyncRecord, SpacetimeClientError> {
if !result.ok {
return Err(SpacetimeClientError::procedure_failed(result.error_message));
}
let record = result
.record
.ok_or_else(|| SpacetimeClientError::missing_snapshot("认证投影同步结果"))?;
Ok(AuthStoreProjectionSyncRecord {
imported_user_count: record.imported_user_count,
imported_identity_count: record.imported_identity_count,
imported_refresh_session_count: record.imported_refresh_session_count,
})
}
pub(crate) fn map_auth_store_projection_view_input(
view: module_auth::AuthStoreProjectionView,
) -> crate::module_bindings::AuthStoreProjectionView {
crate::module_bindings::AuthStoreProjectionView {
updated_at_micros: view.updated_at_micros,
users: view
.users
.into_iter()
.map(|user| crate::module_bindings::AuthStoreProjectionUser {
user_id: user.user_id,
public_user_code: user.public_user_code,
username: user.username,
display_name: user.display_name,
avatar_url: user.avatar_url,
phone_number_masked: user.phone_number_masked,
phone_number_e_164: user.phone_number_e164,
login_method: user.login_method,
binding_status: user.binding_status,
wechat_bound: user.wechat_bound,
password_hash: user.password_hash,
password_login_enabled: user.password_login_enabled,
token_version: user.token_version,
created_at: user.created_at,
})
.collect(),
identities: view
.identities
.into_iter()
.map(
|identity| crate::module_bindings::AuthStoreProjectionIdentity {
identity_id: identity.identity_id,
user_id: identity.user_id,
provider: identity.provider,
provider_uid: identity.provider_uid,
provider_union_id: identity.provider_union_id,
},
)
.collect(),
refresh_sessions: view
.refresh_sessions
.into_iter()
.map(
|session| crate::module_bindings::AuthStoreProjectionRefreshSession {
session_id: session.session_id,
user_id: session.user_id,
refresh_token_hash: session.refresh_token_hash,
issued_by_provider: session.issued_by_provider,
client_info_json: session.client_info_json,
expires_at: session.expires_at,
revoked_at: session.revoked_at,
created_at: session.created_at,
updated_at: session.updated_at,
last_seen_at: session.last_seen_at,
},
)
.collect(),
}
}
fn map_auth_store_projection_view(
view: crate::module_bindings::AuthStoreProjectionView,
) -> module_auth::AuthStoreProjectionView {
module_auth::AuthStoreProjectionView {
updated_at_micros: view.updated_at_micros,
users: view
.users
.into_iter()
.map(|user| module_auth::AuthStoreProjectionUser {
user_id: user.user_id,
public_user_code: user.public_user_code,
username: user.username,
display_name: user.display_name,
avatar_url: user.avatar_url,
phone_number_masked: user.phone_number_masked,
phone_number_e164: user.phone_number_e_164,
login_method: user.login_method,
binding_status: user.binding_status,
wechat_bound: user.wechat_bound,
password_hash: user.password_hash,
password_login_enabled: user.password_login_enabled,
token_version: user.token_version,
created_at: user.created_at,
})
.collect(),
identities: view
.identities
.into_iter()
.map(|identity| module_auth::AuthStoreProjectionIdentity {
identity_id: identity.identity_id,
user_id: identity.user_id,
provider: identity.provider,
provider_uid: identity.provider_uid,
provider_union_id: identity.provider_union_id,
})
.collect(),
refresh_sessions: view
.refresh_sessions
.into_iter()
.map(|session| module_auth::AuthStoreProjectionRefreshSession {
session_id: session.session_id,
user_id: session.user_id,
refresh_token_hash: session.refresh_token_hash,
issued_by_provider: session.issued_by_provider,
client_info_json: session.client_info_json,
expires_at: session.expires_at,
revoked_at: session.revoked_at,
created_at: session.created_at,
updated_at: session.updated_at,
last_seen_at: session.last_seen_at,
})
.collect(),
}
}