feat: async image conversion service (avif/webp) with backfill
This commit is contained in:
@@ -43,6 +43,9 @@ pub enum EventPayload {
|
||||
movie_id: String,
|
||||
external_metadata_id: String,
|
||||
},
|
||||
ImageStored {
|
||||
key: String,
|
||||
},
|
||||
}
|
||||
|
||||
impl EventPayload {
|
||||
@@ -55,6 +58,7 @@ impl EventPayload {
|
||||
EventPayload::UserUpdated { .. } => "UserUpdated",
|
||||
EventPayload::ReviewDeleted { .. } => "ReviewDeleted",
|
||||
EventPayload::MovieEnrichmentRequested { .. } => "MovieEnrichmentRequested",
|
||||
EventPayload::ImageStored { .. } => "ImageStored",
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -114,6 +118,7 @@ impl From<&DomainEvent> for EventPayload {
|
||||
external_metadata_id: external_metadata_id.clone(),
|
||||
}
|
||||
}
|
||||
DomainEvent::ImageStored { key } => EventPayload::ImageStored { key: key.clone() },
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -171,6 +176,9 @@ impl TryFrom<EventPayload> for DomainEvent {
|
||||
external_metadata_id,
|
||||
})
|
||||
}
|
||||
EventPayload::ImageStored { key } => {
|
||||
Ok(DomainEvent::ImageStored { key })
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -247,4 +255,20 @@ mod tests {
|
||||
assert_eq!(EventPayload::from(&review_updated()).event_type(), "ReviewUpdated");
|
||||
assert_eq!(EventPayload::from(&movie_discovered()).event_type(), "MovieDiscovered");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn round_trip_image_stored() {
|
||||
let event = DomainEvent::ImageStored { key: "avatars/abc123".into() };
|
||||
let payload = EventPayload::from(&event);
|
||||
let json = serde_json::to_string(&payload).unwrap();
|
||||
let back: EventPayload = serde_json::from_str(&json).unwrap();
|
||||
let recovered = DomainEvent::try_from(back).unwrap();
|
||||
assert_eq!(EventPayload::from(&event), EventPayload::from(&recovered));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn image_stored_event_type() {
|
||||
let payload = EventPayload::from(&DomainEvent::ImageStored { key: "posters/x".into() });
|
||||
assert_eq!(payload.event_type(), "ImageStored");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user