diff --git a/crates/grpc/server/src/subscriptions/entity.rs b/crates/grpc/server/src/subscriptions/entity.rs index bf83aca8..8fe1eed8 100644 --- a/crates/grpc/server/src/subscriptions/entity.rs +++ b/crates/grpc/server/src/subscriptions/entity.rs @@ -128,21 +128,15 @@ impl Service { continue; } - // When deleted, use match_model which preserves the entity's model values - // before deletion for MemberClause matching - // cc. fix(grpc): preserve pre-deletion model values for MemberClause filter…#407 - let model_for_matching = if let Some(match_model) = &entity.match_model { - Some(match_model.clone()) - } else { - entity.entity.models.first().map(|m| Ty::Struct(m.clone())) - }; - - if !match_entity( - entity.entity.hashed_keys, - &entity.keys, - &model_for_matching, - clause, - ) { + let old_model = entity.match_model.clone(); + let new_model = entity.entity.models.first().map(|m| Ty::Struct(m.clone())); + + let matches_old = + match_entity(entity.entity.hashed_keys, &entity.keys, &old_model, clause); + let matches_new = + match_entity(entity.entity.hashed_keys, &entity.keys, &new_model, clause); + + if !matches_old && !matches_new { continue; } } diff --git a/crates/grpc/server/src/subscriptions/event_message.rs b/crates/grpc/server/src/subscriptions/event_message.rs index 910e150f..ff6382da 100644 --- a/crates/grpc/server/src/subscriptions/event_message.rs +++ b/crates/grpc/server/src/subscriptions/event_message.rs @@ -131,21 +131,15 @@ impl Service { continue; } - // When deleted, use match_model which preserves the entity's model values - // before deletion for MemberClause matching - // cc. fix(grpc): preserve pre-deletion model values for MemberClause filter…#407 - let model_for_matching = if let Some(match_model) = &event.match_model { - Some(match_model.clone()) - } else { - event.entity.models.first().map(|m| Ty::Struct(m.clone())) - }; - - if !match_entity( - event.entity.hashed_keys, - &event.keys, - &model_for_matching, - clause, - ) { + let old_model = event.match_model.clone(); + let new_model = event.entity.models.first().map(|m| Ty::Struct(m.clone())); + + let matches_old = + match_entity(event.entity.hashed_keys, &event.keys, &old_model, clause); + let matches_new = + match_entity(event.entity.hashed_keys, &event.keys, &new_model, clause); + + if !matches_old && !matches_new { continue; } }