class Scene(StashObject):
__type_name__ = "Scene"
__update_input_type__ = SceneUpdateInput
__relationships__ = {
# Pattern A: Direct field (many-to-many)
"galleries": RelationshipMetadata(
target_field="gallery_ids",
is_list=True,
query_field="galleries",
inverse_type="Gallery", # Forward ref to avoid circular import
inverse_query_field="scenes",
query_strategy="direct_field",
notes="Both scene.galleries and gallery.scenes auto-sync"
),
# Pattern A: Direct field (many-to-many)
"performers": RelationshipMetadata(
target_field="performer_ids",
is_list=True,
query_field="performers",
inverse_type="Performer",
inverse_query_field="scenes",
query_strategy="direct_field",
),
# Pattern B: Filter query (many-to-one)
"studio": RelationshipMetadata(
target_field="studio_id",
is_list=False,
query_field="studio",
inverse_type="Studio",
inverse_query_field=None, # No direct field on Studio
query_strategy="filter_query",
filter_query_hint='findScenes(scene_filter={studios: {value: [studio_id]}})',
notes="Studio has scene_count and filter queries, not direct scenes field"
),
# Pattern A: Direct field (many-to-many)
"tags": RelationshipMetadata(
target_field="tag_ids",
is_list=True,
query_field="tags",
inverse_type="Tag",
inverse_query_field=None, # Tag has scene_count only
query_strategy="direct_field",
notes="Tag has scene_count resolver, not scenes list"
),
# Complex: StashID requires transform
"stash_ids": RelationshipMetadata(
target_field="stash_ids",
is_list=True,
transform=lambda s: StashIDInput(endpoint=s.endpoint, stash_id=s.stash_id),
query_field="stash_ids",
notes="Requires transform to StashIDInput"
),
}