47083bfe05
删除 auth_store_snapshot 表和旧 JSON 快照 procedure。 改用 AuthStoreProjectionView 同步 user_account、auth_identity 和 refresh_session。 让 auth 服务从 user_account 投影恢复内存工作集。 同步生成绑定、schema guard 和后端架构文档。
147 lines
5.8 KiB
Rust
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(),
|
|
}
|
|
}
|