diff --git a/epoch_pg/src/event_store.rs b/epoch_pg/src/event_store.rs index 674cbeb..04f70be 100644 --- a/epoch_pg/src/event_store.rs +++ b/epoch_pg/src/event_store.rs @@ -213,7 +213,12 @@ where ) .bind(event.id) .bind(event.stream_id) - .bind(event.stream_version as i64) + .bind(TryInto::::try_into(event.stream_version).map_err(|e| { + PgEventStoreError::DBError(sqlx::error::Error::InvalidArgument(format!( + "stream_version {} is too large to fit in i64: {}", + event.stream_version, e + ))) + })?) .bind(event.event_type.to_string()) .bind( event diff --git a/epoch_pg/tests/pgeventstore_integration_tests.rs b/epoch_pg/tests/pgeventstore_integration_tests.rs index 743fc28..f4a55b1 100644 --- a/epoch_pg/tests/pgeventstore_integration_tests.rs +++ b/epoch_pg/tests/pgeventstore_integration_tests.rs @@ -50,8 +50,24 @@ async fn test_store_event() { })) .build() .unwrap(); - event_store.store_event(event.clone()).await.unwrap(); + + let event_overflow = Event::::builder() + .id(Uuid::new_v4()) + .stream_id(Uuid::new_v4()) + .stream_version(u64::MAX) + .event_type("TestEvent".to_string()) + .data(Some(TestEventData::TestEvent { + value: "test_overflow".to_string(), + })) + .build() + .unwrap(); + assert!(matches!( + event_store.store_event(event_overflow.clone()).await, + Err(epoch_pg::event_store::PgEventStoreError::DBError( + sqlx::error::Error::InvalidArgument(_) + )) + )); teardown(&pool).await; }