Enrich external API failure audit metadata

This commit is contained in:
kdletters
2026-05-28 15:42:46 +08:00
parent 2cd2b9704b
commit f1fb92aa29
40 changed files with 315 additions and 152 deletions

View File

@@ -66,7 +66,10 @@ fn upsert_auth_snapshot_row(
.find(&snapshot_id)
.is_some()
{
ctx.db.auth_store_snapshot().snapshot_id().delete(&snapshot_id);
ctx.db
.auth_store_snapshot()
.snapshot_id()
.delete(&snapshot_id);
}
ctx.db.auth_store_snapshot().insert(AuthStoreSnapshot {
@@ -106,7 +109,10 @@ fn auth_store_snapshot_wechat_row_id(provider_uid: &str, user_id: &str) -> Strin
}
fn auth_store_snapshot_union_row_id(union_id: &str, user_id: &str) -> String {
prefixed_snapshot_id(AUTH_STORE_SNAPSHOT_UNION_PREFIX, &format!("{union_id}|{user_id}"))
prefixed_snapshot_id(
AUTH_STORE_SNAPSHOT_UNION_PREFIX,
&format!("{union_id}|{user_id}"),
)
}
fn snapshot_has_user_rows(snapshot: &PersistentAuthStoreSnapshot) -> bool {
@@ -202,13 +208,7 @@ fn import_auth_store_snapshot_json_value_tx(
for stored_user in parsed.users_by_username.into_values() {
let user = stored_user.user;
let user_id = user.id.clone();
if ctx
.db
.user_account()
.user_id()
.find(&user_id)
.is_some()
{
if ctx.db.user_account().user_id().find(&user_id).is_some() {
ctx.db.user_account().user_id().delete(&user_id);
}
ctx.db.user_account().insert(UserAccount {
@@ -644,10 +644,7 @@ mod tests {
PersistentAuthStoreSnapshot {
next_user_id: 43,
users_by_username: std::collections::HashMap::from([(
"phone_42".to_string(),
user,
)]),
users_by_username: std::collections::HashMap::from([("phone_42".to_string(), user)]),
phone_to_user_id: std::collections::HashMap::from([(
"+8613800008000".to_string(),
"user_00000042".to_string(),

View File

@@ -2603,7 +2603,7 @@ fn is_same_agent_draft_profile_candidate(
) -> bool {
row.owner_user_id == owner_user_id
&& row.deleted_at.is_none()
&& row.visible
&& row.visible
&& row.publication_status == CustomWorldPublicationStatus::Draft
&& row.source_agent_session_id.as_deref() == Some(source_agent_session_id)
}

View File

@@ -16,7 +16,7 @@ use crate::jump_hop::tables::{
jump_hop_agent_session, jump_hop_event, jump_hop_runtime_run, jump_hop_work_profile,
};
use crate::match3d::tables::{
match3d_agent_message, match3d_agent_session, match3d_runtime_run, match_3_d_work_profile,
match_3_d_work_profile, match3d_agent_message, match3d_agent_session, match3d_runtime_run,
};
use crate::puzzle::{
puzzle_agent_message, puzzle_agent_session, puzzle_event, puzzle_leaderboard_entry,

View File

@@ -1,13 +1,13 @@
pub mod analytics_date_dimension;
mod admin_work_visibility;
pub mod analytics_date_dimension;
mod browse_history;
pub mod creation_entry_config;
mod profile;
mod settings;
mod snapshots;
pub use analytics_date_dimension::*;
pub use admin_work_visibility::*;
pub use analytics_date_dimension::*;
pub use browse_history::*;
pub use creation_entry_config::*;
pub use profile::*;

View File

@@ -1,5 +1,5 @@
use crate::*;
use crate::puzzle::{PuzzleWorkProfileRow, puzzle_work_profile};
use crate::*;
use module_custom_world::CustomWorldPublicationStatus;
use module_puzzle::PuzzlePublicationStatus;
@@ -93,7 +93,9 @@ fn update_work_visibility_tx(
update_wooden_fish_work_visibility(ctx, &profile_id, input.visible)
}
SOURCE_TYPE_MATCH3D => update_match3d_work_visibility(ctx, &profile_id, input.visible),
SOURCE_TYPE_SQUARE_HOLE => update_square_hole_work_visibility(ctx, &profile_id, input.visible),
SOURCE_TYPE_SQUARE_HOLE => {
update_square_hole_work_visibility(ctx, &profile_id, input.visible)
}
SOURCE_TYPE_VISUAL_NOVEL => {
update_visual_novel_work_visibility(ctx, &profile_id, input.visible)
}
@@ -158,7 +160,9 @@ fn puzzle_work_visibility_snapshot(row: &PuzzleWorkProfileRow) -> AdminWorkVisib
subtitle: "拼图关卡".to_string(),
cover_image_src: row.cover_image_src.clone(),
visible: row.visible,
published_at_micros: row.published_at.map(|value| value.to_micros_since_unix_epoch()),
published_at_micros: row
.published_at
.map(|value| value.to_micros_since_unix_epoch()),
updated_at_micros: sort_time,
}
}
@@ -234,7 +238,9 @@ fn custom_world_work_visibility_snapshot(row: &CustomWorldProfile) -> AdminWorkV
subtitle: row.subtitle.clone(),
cover_image_src: row.cover_image_src.clone(),
visible: row.visible,
published_at_micros: row.published_at.map(|value| value.to_micros_since_unix_epoch()),
published_at_micros: row
.published_at
.map(|value| value.to_micros_since_unix_epoch()),
updated_at_micros: sort_time,
}
}
@@ -287,7 +293,9 @@ fn jump_hop_work_visibility_snapshot(row: &JumpHopWorkProfileRow) -> AdminWorkVi
subtitle: "跳一跳".to_string(),
cover_image_src: Some(row.cover_image_src.clone()).filter(|value| !value.is_empty()),
visible: row.visible,
published_at_micros: row.published_at.map(|value| value.to_micros_since_unix_epoch()),
published_at_micros: row
.published_at
.map(|value| value.to_micros_since_unix_epoch()),
updated_at_micros: sort_time,
}
}
@@ -342,7 +350,9 @@ fn wooden_fish_work_visibility_snapshot(
subtitle: "敲木鱼".to_string(),
cover_image_src: Some(row.cover_image_src.clone()).filter(|value| !value.is_empty()),
visible: row.visible,
published_at_micros: row.published_at.map(|value| value.to_micros_since_unix_epoch()),
published_at_micros: row
.published_at
.map(|value| value.to_micros_since_unix_epoch()),
updated_at_micros: sort_time,
}
}
@@ -395,7 +405,9 @@ fn match3d_work_visibility_snapshot(row: &Match3DWorkProfileRow) -> AdminWorkVis
subtitle: "抓大鹅".to_string(),
cover_image_src: Some(row.cover_image_src.clone()).filter(|value| !value.is_empty()),
visible: row.visible,
published_at_micros: row.published_at.map(|value| value.to_micros_since_unix_epoch()),
published_at_micros: row
.published_at
.map(|value| value.to_micros_since_unix_epoch()),
updated_at_micros: sort_time,
}
}
@@ -450,7 +462,9 @@ fn square_hole_work_visibility_snapshot(
subtitle: "方洞挑战".to_string(),
cover_image_src: Some(row.cover_image_src.clone()).filter(|value| !value.is_empty()),
visible: row.visible,
published_at_micros: row.published_at.map(|value| value.to_micros_since_unix_epoch()),
published_at_micros: row
.published_at
.map(|value| value.to_micros_since_unix_epoch()),
updated_at_micros: sort_time,
}
}
@@ -505,7 +519,9 @@ fn visual_novel_work_visibility_snapshot(
subtitle: "视觉小说".to_string(),
cover_image_src: Some(row.cover_image_src.clone()).filter(|value| !value.is_empty()),
visible: row.visible,
published_at_micros: row.published_at.map(|value| value.to_micros_since_unix_epoch()),
published_at_micros: row
.published_at
.map(|value| value.to_micros_since_unix_epoch()),
updated_at_micros: sort_time,
}
}
@@ -544,10 +560,10 @@ fn update_big_fish_work_visibility(
Ok(snapshot)
}
fn big_fish_work_visibility_snapshot(
row: &BigFishCreationSession,
) -> AdminWorkVisibilitySnapshot {
let published_at = row.published_at.map(|value| value.to_micros_since_unix_epoch());
fn big_fish_work_visibility_snapshot(row: &BigFishCreationSession) -> AdminWorkVisibilitySnapshot {
let published_at = row
.published_at
.map(|value| value.to_micros_since_unix_epoch());
let updated_at = timestamp_sort_micros(row.published_at, row.updated_at);
AdminWorkVisibilitySnapshot {
source_type: SOURCE_TYPE_BIG_FISH.to_string(),