From e0184338b60e9e36957f51cf459ff28e1a031daa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Wed, 2 Sep 2026 19:07:34 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E9=94=99=E8=AF=AF=E6=8A=A5?= =?UTF-8?q?=E5=91=8A=E7=94=A8=E6=88=B7=E5=BD=92=E5=B1=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 创建输入接收并校验 API 注入的登录用户 ID 同步 SpacetimeDB module、client facade 与生成绑定字段 --- server-rs/crates/api-server/src/error_reports.rs | 1 + .../spacetime-client/src/active/mapper/error_reports.rs | 2 ++ .../src/module_bindings/error_report_create_input_type.rs | 1 + server-rs/crates/spacetime-module/src/error_report.rs | 4 ++-- 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/server-rs/crates/api-server/src/error_reports.rs b/server-rs/crates/api-server/src/error_reports.rs index 48315f849..93dcf974c 100644 --- a/server-rs/crates/api-server/src/error_reports.rs +++ b/server-rs/crates/api-server/src/error_reports.rs @@ -167,6 +167,7 @@ pub async fn create_error_report( batch_id: batch_id.clone(), submission_id: payload.submission_id.clone(), idempotency_key: format!("{}:{}", auth.claims().user_id(), payload.submission_id), + user_id: auth.claims().user_id().to_string(), object_key: object_key.clone(), archive_sha256: digest, archive_size_bytes: archive.len() as u64, diff --git a/server-rs/crates/spacetime-client/src/active/mapper/error_reports.rs b/server-rs/crates/spacetime-client/src/active/mapper/error_reports.rs index 24c83c2da..7d1f96a5d 100644 --- a/server-rs/crates/spacetime-client/src/active/mapper/error_reports.rs +++ b/server-rs/crates/spacetime-client/src/active/mapper/error_reports.rs @@ -24,6 +24,7 @@ pub struct ErrorReportCreateRecordInput { pub batch_id: String, pub submission_id: String, pub idempotency_key: String, + pub user_id: String, pub object_key: String, pub archive_sha256: String, pub archive_size_bytes: u64, @@ -90,6 +91,7 @@ impl From for ErrorReportCreateInput { batch_id: i.batch_id, submission_id: i.submission_id, idempotency_key: i.idempotency_key, + user_id: i.user_id, object_key: i.object_key, archive_sha_256: i.archive_sha256, archive_size_bytes: i.archive_size_bytes, diff --git a/server-rs/crates/spacetime-client/src/module_bindings/error_report_create_input_type.rs b/server-rs/crates/spacetime-client/src/module_bindings/error_report_create_input_type.rs index 839908f56..50f283f45 100644 --- a/server-rs/crates/spacetime-client/src/module_bindings/error_report_create_input_type.rs +++ b/server-rs/crates/spacetime-client/src/module_bindings/error_report_create_input_type.rs @@ -10,6 +10,7 @@ pub struct ErrorReportCreateInput { pub batch_id: String, pub submission_id: String, pub idempotency_key: String, + pub user_id: String, pub object_key: String, pub archive_sha_256: String, pub archive_size_bytes: u64, diff --git a/server-rs/crates/spacetime-module/src/error_report.rs b/server-rs/crates/spacetime-module/src/error_report.rs index fff94a34e..56b1e65c3 100644 --- a/server-rs/crates/spacetime-module/src/error_report.rs +++ b/server-rs/crates/spacetime-module/src/error_report.rs @@ -37,6 +37,7 @@ pub struct ErrorReportCreateInput { pub batch_id: String, pub submission_id: String, pub idempotency_key: String, + pub user_id: String, pub object_key: String, pub archive_sha256: String, pub archive_size_bytes: u64, @@ -143,7 +144,6 @@ pub fn create_error_report_and_return( ctx: &mut ProcedureContext, input: ErrorReportCreateInput, ) -> ErrorReportProcedureResult { - let caller_user_id = ctx.sender().to_hex().to_string(); let caller = ctx.sender(); let now = ctx.timestamp; match ctx.try_with_tx(|tx| { @@ -151,7 +151,7 @@ pub fn create_error_report_and_return( tx, caller, )?; let batch_id = validate_text(&input.batch_id, "batch_id")?; - let user_id = validate_text(&caller_user_id, "user_id")?; + let user_id = validate_text(&input.user_id, "user_id")?; let submission_id = validate_text(&input.submission_id, "submission_id")?; let idempotency_key = validate_text(&input.idempotency_key, "idempotency_key")?; let object_key = validate_text(&input.object_key, "object_key")?;