commit bd325cdec369fc0ad356db4894d530be72d8978e
parent 24438809cc6af8276fb0bca55bcf87fd5f2b5ca3
Author: triesap <tyson@radroots.org>
Date: Wed, 24 Jun 2026 22:20:19 +0000
replica_db_schema: restore relation find-many dto descriptors
Diffstat:
1 file changed, 64 insertions(+), 1 deletion(-)
diff --git a/crates/replica_db_schema/src/dto.rs b/crates/replica_db_schema/src/dto.rs
@@ -871,6 +871,13 @@ const TYPE_SPECS: &[TypeSpec] = &[
FieldSpec::optional_nullable("gc_country_name", "ReplicaDbJsonValue"),
],
},
+ TypeSpec::Union {
+ name: "IGcsLocationFindMany",
+ variants: &[
+ VariantSpec::Object(&[FieldSpec::nullable("filter", "IGcsLocationFieldsFilter")]),
+ VariantSpec::Object(&[FieldSpec::required("rel", "GcsLocationFindManyRel")]),
+ ],
+ },
TypeSpec::Alias {
name: "IGcsLocationFindManyResolve",
target: "IResultList<GcsLocation>",
@@ -1058,6 +1065,13 @@ const TYPE_SPECS: &[TypeSpec] = &[
FieldSpec::optional_nullable("description", "ReplicaDbJsonValue"),
],
},
+ TypeSpec::Union {
+ name: "IMediaImageFindMany",
+ variants: &[
+ VariantSpec::Object(&[FieldSpec::nullable("filter", "IMediaImageFieldsFilter")]),
+ VariantSpec::Object(&[FieldSpec::required("rel", "MediaImageFindManyRel")]),
+ ],
+ },
TypeSpec::Alias {
name: "IMediaImageFindManyResolve",
target: "IResultList<MediaImage>",
@@ -1257,6 +1271,13 @@ const TYPE_SPECS: &[TypeSpec] = &[
FieldSpec::optional_nullable("lud16", "ReplicaDbJsonValue"),
],
},
+ TypeSpec::Union {
+ name: "INostrProfileFindMany",
+ variants: &[
+ VariantSpec::Object(&[FieldSpec::nullable("filter", "INostrProfileFieldsFilter")]),
+ VariantSpec::Object(&[FieldSpec::required("rel", "NostrProfileFindManyRel")]),
+ ],
+ },
TypeSpec::Alias {
name: "INostrProfileFindManyResolve",
target: "IResultList<NostrProfile>",
@@ -1370,6 +1391,13 @@ const TYPE_SPECS: &[TypeSpec] = &[
FieldSpec::optional_nullable("data", "ReplicaDbJsonValue"),
],
},
+ TypeSpec::Union {
+ name: "INostrRelayFindMany",
+ variants: &[
+ VariantSpec::Object(&[FieldSpec::nullable("filter", "INostrRelayFieldsFilter")]),
+ VariantSpec::Object(&[FieldSpec::required("rel", "NostrRelayFindManyRel")]),
+ ],
+ },
TypeSpec::Alias {
name: "INostrRelayFindManyResolve",
target: "IResultList<NostrRelay>",
@@ -2093,7 +2121,7 @@ const TYPE_SPECS: &[TypeSpec] = &[
#[cfg(test)]
mod tests {
- use super::{TYPE_SPECS, TypeSpec, dto_registry, type_inventory};
+ use super::{FieldSpec, TYPE_SPECS, TypeSpec, VariantSpec, dto_registry, type_inventory};
#[test]
fn registry_exports_known_schema_types() {
@@ -2116,6 +2144,41 @@ mod tests {
}
#[test]
+ fn relation_find_many_inputs_preserve_filter_and_rel_variants() {
+ for (name, filter, rel) in [
+ (
+ "IGcsLocationFindMany",
+ "IGcsLocationFieldsFilter",
+ "GcsLocationFindManyRel",
+ ),
+ (
+ "IMediaImageFindMany",
+ "IMediaImageFieldsFilter",
+ "MediaImageFindManyRel",
+ ),
+ (
+ "INostrProfileFindMany",
+ "INostrProfileFieldsFilter",
+ "NostrProfileFindManyRel",
+ ),
+ (
+ "INostrRelayFindMany",
+ "INostrRelayFieldsFilter",
+ "NostrRelayFindManyRel",
+ ),
+ ] {
+ assert!(TYPE_SPECS.iter().any(|spec| matches!(
+ spec,
+ TypeSpec::Union { name: actual_name, variants }
+ if *actual_name == name
+ && variants.len() == 2
+ && matches!(variants[0], VariantSpec::Object(fields) if fields.len() == 1 && fields[0] == FieldSpec::nullable("filter", filter))
+ && matches!(variants[1], VariantSpec::Object(fields) if fields.len() == 1 && fields[0] == FieldSpec::required("rel", rel))
+ )));
+ }
+ }
+
+ #[test]
fn serde_json_value_policy_is_explicit() {
assert!(TYPE_SPECS.iter().any(|spec| matches!(
spec,