merge: fix spacetimedb filtered index panics

This commit is contained in:
kdletters
2026-05-28 03:00:18 +08:00
2 changed files with 23 additions and 20 deletions

View File

@@ -696,15 +696,16 @@ fn list_match3d_works_tx(
let rows = if input.published_only {
ctx.db
.match3d_work_profile()
.by_match3d_work_publication_status()
.filter(&MATCH3D_PUBLICATION_PUBLISHED.to_string())
.iter()
// 中文注释:列表页优先稳定性,避免二级索引 filter 初始化异常直接打爆模块实例。
.filter(|row| row.publication_status == MATCH3D_PUBLICATION_PUBLISHED)
.collect::<Vec<_>>()
} else {
require_non_empty(&input.owner_user_id, "match3d owner_user_id")?;
ctx.db
.match3d_work_profile()
.by_match3d_work_owner_user_id()
.filter(&input.owner_user_id)
.iter()
.filter(|row| row.owner_user_id == input.owner_user_id)
.collect::<Vec<_>>()
};
let mut items = rows

View File

@@ -108,8 +108,9 @@ fn update_work_visibility_tx(
fn list_puzzle_work_visibility(ctx: &ReducerContext) -> Vec<AdminWorkVisibilitySnapshot> {
ctx.db
.puzzle_work_profile()
.by_puzzle_work_publication_status()
.filter(PuzzlePublicationStatus::Published)
.iter()
// 中文注释:后台页签是低频管理入口,列表优先保证稳定性,避免二级索引 filter 初始化异常打爆 wasm 实例。
.filter(|row| row.publication_status == PuzzlePublicationStatus::Published)
.map(|row| puzzle_work_visibility_snapshot(&row))
.collect()
}
@@ -165,8 +166,9 @@ fn puzzle_work_visibility_snapshot(row: &PuzzleWorkProfileRow) -> AdminWorkVisib
fn list_custom_world_work_visibility(ctx: &ReducerContext) -> Vec<AdminWorkVisibilitySnapshot> {
ctx.db
.custom_world_profile()
.by_custom_world_profile_publication_status()
.filter(CustomWorldPublicationStatus::Published)
.iter()
// 中文注释:后台必须能读到所有已发布源表记录,包括已隐藏作品,因此不复用公开 view。
.filter(|row| row.publication_status == CustomWorldPublicationStatus::Published)
.filter(|row| row.deleted_at.is_none())
.map(|row| custom_world_work_visibility_snapshot(&row))
.collect()
@@ -240,8 +242,8 @@ fn custom_world_work_visibility_snapshot(row: &CustomWorldProfile) -> AdminWorkV
fn list_jump_hop_work_visibility(ctx: &ReducerContext) -> Vec<AdminWorkVisibilitySnapshot> {
ctx.db
.jump_hop_work_profile()
.by_jump_hop_work_publication_status()
.filter(JUMP_HOP_PUBLICATION_PUBLISHED)
.iter()
.filter(|row| row.publication_status == JUMP_HOP_PUBLICATION_PUBLISHED)
.map(|row| jump_hop_work_visibility_snapshot(&row))
.collect()
}
@@ -293,8 +295,8 @@ fn jump_hop_work_visibility_snapshot(row: &JumpHopWorkProfileRow) -> AdminWorkVi
fn list_wooden_fish_work_visibility(ctx: &ReducerContext) -> Vec<AdminWorkVisibilitySnapshot> {
ctx.db
.wooden_fish_work_profile()
.by_wooden_fish_work_publication_status()
.filter(WOODEN_FISH_PUBLICATION_PUBLISHED)
.iter()
.filter(|row| row.publication_status == WOODEN_FISH_PUBLICATION_PUBLISHED)
.map(|row| wooden_fish_work_visibility_snapshot(&row))
.collect()
}
@@ -348,8 +350,8 @@ fn wooden_fish_work_visibility_snapshot(
fn list_match3d_work_visibility(ctx: &ReducerContext) -> Vec<AdminWorkVisibilitySnapshot> {
ctx.db
.match3d_work_profile()
.by_match3d_work_publication_status()
.filter(MATCH3D_PUBLICATION_PUBLISHED)
.iter()
.filter(|row| row.publication_status == MATCH3D_PUBLICATION_PUBLISHED)
.map(|row| match3d_work_visibility_snapshot(&row))
.collect()
}
@@ -401,8 +403,8 @@ fn match3d_work_visibility_snapshot(row: &Match3DWorkProfileRow) -> AdminWorkVis
fn list_square_hole_work_visibility(ctx: &ReducerContext) -> Vec<AdminWorkVisibilitySnapshot> {
ctx.db
.square_hole_work_profile()
.by_square_hole_work_publication_status()
.filter(SQUARE_HOLE_PUBLICATION_PUBLISHED)
.iter()
.filter(|row| row.publication_status == SQUARE_HOLE_PUBLICATION_PUBLISHED)
.map(|row| square_hole_work_visibility_snapshot(&row))
.collect()
}
@@ -456,8 +458,8 @@ fn square_hole_work_visibility_snapshot(
fn list_visual_novel_work_visibility(ctx: &ReducerContext) -> Vec<AdminWorkVisibilitySnapshot> {
ctx.db
.visual_novel_work_profile()
.by_visual_novel_work_publication_status()
.filter(VISUAL_NOVEL_PUBLICATION_PUBLISHED)
.iter()
.filter(|row| row.publication_status == VISUAL_NOVEL_PUBLICATION_PUBLISHED)
.map(|row| visual_novel_work_visibility_snapshot(&row))
.collect()
}
@@ -511,8 +513,8 @@ fn visual_novel_work_visibility_snapshot(
fn list_big_fish_work_visibility(ctx: &ReducerContext) -> Vec<AdminWorkVisibilitySnapshot> {
ctx.db
.big_fish_creation_session()
.by_big_fish_session_stage()
.filter(BigFishCreationStage::Published)
.iter()
.filter(|row| row.stage == BigFishCreationStage::Published)
.map(|row| big_fish_work_visibility_snapshot(&row))
.collect()
}