diff --git a/examples/aggregate_deletion/main.rs b/examples/aggregate_deletion/main.rs index ee6da1c0..a3998855 100644 --- a/examples/aggregate_deletion/main.rs +++ b/examples/aggregate_deletion/main.rs @@ -1,8 +1,10 @@ use sqlx::{Pool, Postgres}; use uuid::Uuid; -use esrs::postgres::{PgStore, PgStoreBuilder}; -use esrs::{AggregateManager, AggregateState, EventStore, StoreEvent}; +use esrs::manager::AggregateManager; +use esrs::store::postgres::{PgStore, PgStoreBuilder}; +use esrs::store::{EventStore, StoreEvent}; +use esrs::AggregateState; use crate::common::{new_pool, BasicAggregate, BasicCommand, BasicEvent, BasicEventHandler, BasicView}; diff --git a/examples/common/basic/event_handler.rs b/examples/common/basic/event_handler.rs index 77571530..41619e76 100644 --- a/examples/common/basic/event_handler.rs +++ b/examples/common/basic/event_handler.rs @@ -2,7 +2,8 @@ use async_trait::async_trait; use sqlx::{Pool, Postgres}; use uuid::Uuid; -use esrs::{EventHandler, StoreEvent}; +use esrs::handler::EventHandler; +use esrs::store::StoreEvent; use crate::common::{BasicAggregate, BasicEvent, BasicView}; diff --git a/examples/common/shared/event_handler.rs b/examples/common/shared/event_handler.rs index 624508d6..5e3c9658 100644 --- a/examples/common/shared/event_handler.rs +++ b/examples/common/shared/event_handler.rs @@ -1,7 +1,8 @@ use async_trait::async_trait; use sqlx::{Pool, Postgres}; -use esrs::{EventHandler, ReplayableEventHandler, StoreEvent}; +use esrs::handler::{EventHandler, ReplayableEventHandler}; +use esrs::store::StoreEvent; use crate::common::{AggregateA, AggregateB, EventA, EventB, SharedView, UpsertSharedView}; diff --git a/examples/event_bus/kafka.rs b/examples/event_bus/kafka.rs index 8bd0c4a9..01cec52c 100644 --- a/examples/event_bus/kafka.rs +++ b/examples/event_bus/kafka.rs @@ -2,7 +2,9 @@ use rdkafka::consumer::{Consumer, StreamConsumer}; use rdkafka::{ClientConfig, Message}; use serde::de::DeserializeOwned; -use esrs::{Aggregate, EventHandler, StoreEvent}; +use esrs::handler::EventHandler; +use esrs::store::StoreEvent; +use esrs::Aggregate; pub struct KafkaEventBusConsumer { consumer: StreamConsumer, diff --git a/examples/event_bus/main.rs b/examples/event_bus/main.rs index f2f3c528..8e1fa5bd 100644 --- a/examples/event_bus/main.rs +++ b/examples/event_bus/main.rs @@ -7,10 +7,11 @@ use rdkafka::ClientConfig; use sqlx::{Pool, Postgres}; use uuid::Uuid; -use esrs::event_bus::kafka::{KafkaEventBus, KafkaEventBusConfig}; -use esrs::event_bus::rabbit::{RabbitEventBus, RabbitEventBusConfig}; -use esrs::postgres::{PgStore, PgStoreBuilder}; -use esrs::{AggregateManager, AggregateState}; +use esrs::bus::kafka::{KafkaEventBus, KafkaEventBusConfig}; +use esrs::bus::rabbit::{RabbitEventBus, RabbitEventBusConfig}; +use esrs::manager::AggregateManager; +use esrs::store::postgres::{PgStore, PgStoreBuilder}; +use esrs::AggregateState; use crate::common::{new_pool, random_letters, BasicAggregate, BasicCommand, BasicEventHandler, BasicView}; use crate::kafka::KafkaEventBusConsumer; diff --git a/examples/event_bus/rabbit.rs b/examples/event_bus/rabbit.rs index 98623466..84bf8687 100644 --- a/examples/event_bus/rabbit.rs +++ b/examples/event_bus/rabbit.rs @@ -4,7 +4,9 @@ use lapin::types::FieldTable; use lapin::{Connection, ConnectionProperties, Consumer}; use serde::de::DeserializeOwned; -use esrs::{Aggregate, EventHandler, StoreEvent}; +use esrs::handler::EventHandler; +use esrs::store::StoreEvent; +use esrs::Aggregate; use crate::common::random_letters; diff --git a/examples/eventual_view/main.rs b/examples/eventual_view/main.rs index 7dbfaaad..80106755 100644 --- a/examples/eventual_view/main.rs +++ b/examples/eventual_view/main.rs @@ -1,8 +1,9 @@ use sqlx::{Pool, Postgres}; use uuid::Uuid; -use esrs::postgres::{PgStore, PgStoreBuilder}; -use esrs::{AggregateManager, AggregateState}; +use esrs::manager::AggregateManager; +use esrs::store::postgres::{PgStore, PgStoreBuilder}; +use esrs::AggregateState; use crate::common::{new_pool, BasicAggregate, BasicCommand, BasicEventHandler, BasicView}; diff --git a/examples/locking_strategies/main.rs b/examples/locking_strategies/main.rs index bb858dc4..711e9fc4 100644 --- a/examples/locking_strategies/main.rs +++ b/examples/locking_strategies/main.rs @@ -5,8 +5,10 @@ use sqlx::{Pool, Postgres}; use tokio::sync::Mutex; use uuid::Uuid; -use esrs::postgres::{PgStore, PgStoreBuilder}; -use esrs::{AggregateManager, AggregateManagerError, AggregateState, EventStore}; +use esrs::manager::{AggregateManager, AggregateManagerError}; +use esrs::store::postgres::{PgStore, PgStoreBuilder}; +use esrs::store::EventStore; +use esrs::AggregateState; use crate::common::{new_pool, BasicAggregate, BasicCommand, BasicEvent}; diff --git a/examples/multi_aggregate_rebuild/main.rs b/examples/multi_aggregate_rebuild/main.rs index b7448b0b..8e04d145 100644 --- a/examples/multi_aggregate_rebuild/main.rs +++ b/examples/multi_aggregate_rebuild/main.rs @@ -2,8 +2,11 @@ use futures::StreamExt; use sqlx::{PgConnection, Pool, Postgres, Transaction}; use uuid::Uuid; -use esrs::postgres::{PgStore, PgStoreBuilder, PgStoreError}; -use esrs::{AggregateManager, AggregateState, ReplayableEventHandler, StoreEvent, TransactionalEventHandler}; +use esrs::handler::{ReplayableEventHandler, TransactionalEventHandler}; +use esrs::manager::AggregateManager; +use esrs::store::postgres::{PgStore, PgStoreBuilder, PgStoreError}; +use esrs::store::StoreEvent; +use esrs::AggregateState; use crate::common::{ new_pool, AggregateA, AggregateB, CommandA, CommandB, EventA, EventB, SharedEventHandler, SharedView, diff --git a/examples/multi_aggregate_rebuild/transactional_event_handler.rs b/examples/multi_aggregate_rebuild/transactional_event_handler.rs index f61819fb..0d9376d4 100644 --- a/examples/multi_aggregate_rebuild/transactional_event_handler.rs +++ b/examples/multi_aggregate_rebuild/transactional_event_handler.rs @@ -1,8 +1,9 @@ use async_trait::async_trait; use sqlx::PgConnection; -use esrs::postgres::PgStoreError; -use esrs::{StoreEvent, TransactionalEventHandler}; +use esrs::handler::TransactionalEventHandler; +use esrs::store::postgres::PgStoreError; +use esrs::store::StoreEvent; use crate::common::{AggregateA, AggregateB, EventA, EventB, SharedView, UpsertSharedView}; diff --git a/examples/rebuilder/event_handler.rs b/examples/rebuilder/event_handler.rs index d3a4bb1e..e91ed6a7 100644 --- a/examples/rebuilder/event_handler.rs +++ b/examples/rebuilder/event_handler.rs @@ -1,7 +1,8 @@ use async_trait::async_trait; use sqlx::{Pool, Postgres}; -use esrs::{EventHandler, ReplayableEventHandler, StoreEvent}; +use esrs::handler::{EventHandler, ReplayableEventHandler}; +use esrs::store::StoreEvent; /// This is just an example. The need of v1 and v2 is due to having both the version of this event /// handler compiled in the code. In user codebase there will be only one `BasicEventHandler` diff --git a/examples/rebuilder/main.rs b/examples/rebuilder/main.rs index 15682c4d..eb6108e3 100644 --- a/examples/rebuilder/main.rs +++ b/examples/rebuilder/main.rs @@ -33,9 +33,10 @@ use sqlx::{Pool, Postgres}; use uuid::Uuid; -use esrs::postgres::{PgStore, PgStoreBuilder}; +use esrs::manager::AggregateManager; use esrs::rebuilder::{PgRebuilder, Rebuilder}; -use esrs::{AggregateManager, AggregateState}; +use esrs::store::postgres::{PgStore, PgStoreBuilder}; +use esrs::AggregateState; use crate::common::{new_pool, BasicAggregate, BasicCommand, BasicView}; use crate::event_handler::{AnotherEventHandler, BasicEventHandlerV1, BasicEventHandlerV2}; diff --git a/examples/rebuilder/transactional_event_handler.rs b/examples/rebuilder/transactional_event_handler.rs index 508fe5f9..aa5e2b52 100644 --- a/examples/rebuilder/transactional_event_handler.rs +++ b/examples/rebuilder/transactional_event_handler.rs @@ -1,8 +1,9 @@ use async_trait::async_trait; use sqlx::PgConnection; -use esrs::postgres::PgStoreError; -use esrs::{StoreEvent, TransactionalEventHandler}; +use esrs::handler::TransactionalEventHandler; +use esrs::store::postgres::PgStoreError; +use esrs::store::StoreEvent; use crate::common::{BasicAggregate, BasicEvent, BasicView}; diff --git a/examples/saga/event_handler.rs b/examples/saga/event_handler.rs index 49b83673..5debcf38 100644 --- a/examples/saga/event_handler.rs +++ b/examples/saga/event_handler.rs @@ -3,8 +3,10 @@ use std::sync::Arc; use async_trait::async_trait; use futures::lock::Mutex; -use esrs::postgres::PgStore; -use esrs::{AggregateManager, EventHandler, StoreEvent}; +use esrs::handler::EventHandler; +use esrs::manager::AggregateManager; +use esrs::store::postgres::PgStore; +use esrs::store::StoreEvent; use crate::aggregate::{SagaAggregate, SagaCommand, SagaEvent}; diff --git a/examples/saga/main.rs b/examples/saga/main.rs index f95c3964..fb3babcb 100644 --- a/examples/saga/main.rs +++ b/examples/saga/main.rs @@ -4,8 +4,10 @@ use futures::lock::Mutex; use sqlx::{Pool, Postgres}; use uuid::Uuid; -use esrs::postgres::{PgStore, PgStoreBuilder}; -use esrs::{AggregateManager, AggregateState, EventStore}; +use esrs::manager::AggregateManager; +use esrs::store::postgres::{PgStore, PgStoreBuilder}; +use esrs::store::EventStore; +use esrs::AggregateState; use crate::aggregate::{SagaAggregate, SagaCommand, SagaEvent}; use crate::common::new_pool; diff --git a/examples/shared_view/main.rs b/examples/shared_view/main.rs index ff053806..7dc13354 100644 --- a/examples/shared_view/main.rs +++ b/examples/shared_view/main.rs @@ -1,8 +1,9 @@ use sqlx::{Pool, Postgres}; use uuid::Uuid; -use esrs::postgres::{PgStore, PgStoreBuilder}; -use esrs::{AggregateManager, AggregateState}; +use esrs::manager::AggregateManager; +use esrs::store::postgres::{PgStore, PgStoreBuilder}; +use esrs::AggregateState; use crate::common::{new_pool, AggregateA, AggregateB, CommandA, CommandB, SharedEventHandler, SharedView}; diff --git a/examples/store_crud/main.rs b/examples/store_crud/main.rs index 9a04cb1f..ce263aab 100644 --- a/examples/store_crud/main.rs +++ b/examples/store_crud/main.rs @@ -5,9 +5,10 @@ use sqlx::types::Json; use sqlx::{Pool, Postgres}; use uuid::Uuid; -use esrs::postgres::{PgStore, PgStoreBuilder}; -use esrs::sql::Event; -use esrs::{AggregateState, EventStore, StoreEvent}; +use esrs::sql::event::Event; +use esrs::store::postgres::{PgStore, PgStoreBuilder}; +use esrs::store::{EventStore, StoreEvent}; +use esrs::AggregateState; use crate::common::{new_pool, BasicAggregate, BasicEvent}; diff --git a/examples/transactional_view/main.rs b/examples/transactional_view/main.rs index b14367c0..a9297581 100644 --- a/examples/transactional_view/main.rs +++ b/examples/transactional_view/main.rs @@ -1,8 +1,10 @@ use sqlx::{Pool, Postgres}; use uuid::Uuid; -use esrs::postgres::{PgStore, PgStoreBuilder}; -use esrs::{AggregateManager, AggregateState, EventStore}; +use esrs::manager::AggregateManager; +use esrs::store::postgres::{PgStore, PgStoreBuilder}; +use esrs::store::EventStore; +use esrs::AggregateState; use crate::common::{new_pool, BasicAggregate, BasicCommand, BasicView, BasicViewRow}; use crate::transactional_event_handler::BasicTransactionalEventHandler; diff --git a/examples/transactional_view/transactional_event_handler.rs b/examples/transactional_view/transactional_event_handler.rs index 0a2d66fd..1b3203f7 100644 --- a/examples/transactional_view/transactional_event_handler.rs +++ b/examples/transactional_view/transactional_event_handler.rs @@ -1,8 +1,9 @@ use async_trait::async_trait; use sqlx::PgConnection; -use esrs::postgres::PgStoreError; -use esrs::{StoreEvent, TransactionalEventHandler}; +use esrs::handler::TransactionalEventHandler; +use esrs::store::postgres::PgStoreError; +use esrs::store::StoreEvent; use crate::common::{BasicAggregate, BasicEvent, BasicView}; diff --git a/src/esrs/aggregate.rs b/src/aggregate.rs similarity index 100% rename from src/esrs/aggregate.rs rename to src/aggregate.rs diff --git a/src/esrs/event_bus/kafka/config.rs b/src/bus/kafka/config.rs similarity index 93% rename from src/esrs/event_bus/kafka/config.rs rename to src/bus/kafka/config.rs index 859418b2..0d032d08 100644 --- a/src/esrs/event_bus/kafka/config.rs +++ b/src/bus/kafka/config.rs @@ -1,7 +1,7 @@ use rdkafka::ClientConfig; use typed_builder::TypedBuilder; -use crate::event_bus::kafka::error::KafkaEventBusError; +use crate::bus::kafka::error::KafkaEventBusError; #[derive(TypedBuilder)] pub struct KafkaEventBusConfig<'a> { @@ -24,7 +24,7 @@ pub struct KafkaEventBusConfig<'a> { pub(crate) client_config: Option, /// A boxed anonymous function utilized to provide a form of error handling, commonly used for /// reporting purposes. - #[builder(default = Box::new(|_| ()))] + #[builder(default = Box::new(| _ | ()))] pub(crate) error_handler: Box, } diff --git a/src/esrs/event_bus/kafka/error.rs b/src/bus/kafka/error.rs similarity index 100% rename from src/esrs/event_bus/kafka/error.rs rename to src/bus/kafka/error.rs diff --git a/src/esrs/event_bus/kafka/mod.rs b/src/bus/kafka/mod.rs similarity index 96% rename from src/esrs/event_bus/kafka/mod.rs rename to src/bus/kafka/mod.rs index 86de74e0..3c13aff4 100644 --- a/src/esrs/event_bus/kafka/mod.rs +++ b/src/bus/kafka/mod.rs @@ -9,8 +9,9 @@ use serde::Serialize; pub use config::KafkaEventBusConfig; pub use error::KafkaEventBusError; -use crate::event_bus::EventBus; -use crate::{Aggregate, StoreEvent}; +use crate::bus::EventBus; +use crate::store::StoreEvent; +use crate::Aggregate; mod config; mod error; diff --git a/src/esrs/event_bus.rs b/src/bus/mod.rs similarity index 91% rename from src/esrs/event_bus.rs rename to src/bus/mod.rs index 54c3b420..feec3e63 100644 --- a/src/esrs/event_bus.rs +++ b/src/bus/mod.rs @@ -1,6 +1,7 @@ use async_trait::async_trait; -use crate::{Aggregate, StoreEvent}; +use crate::store::StoreEvent; +use crate::Aggregate; #[cfg(feature = "kafka")] pub mod kafka; diff --git a/src/esrs/event_bus/rabbit/config.rs b/src/bus/rabbit/config.rs similarity index 94% rename from src/esrs/event_bus/rabbit/config.rs rename to src/bus/rabbit/config.rs index ea1e7c10..2493aadb 100644 --- a/src/esrs/event_bus/rabbit/config.rs +++ b/src/bus/rabbit/config.rs @@ -3,7 +3,7 @@ use lapin::types::FieldTable; use lapin::{BasicProperties, ConnectionProperties, ExchangeKind}; use typed_builder::TypedBuilder; -use crate::event_bus::rabbit::error::RabbitEventBusError; +use crate::bus::rabbit::error::RabbitEventBusError; #[derive(TypedBuilder)] pub struct RabbitEventBusConfig<'a> { @@ -38,6 +38,6 @@ pub struct RabbitEventBusConfig<'a> { pub(crate) publish_properties: BasicProperties, /// A boxed anonymous function utilized to provide a form of error handling, commonly used for /// reporting purposes. - #[builder(default = Box::new(|_| ()))] + #[builder(default = Box::new(| _ | ()))] pub(crate) error_handler: Box, } diff --git a/src/esrs/event_bus/rabbit/error.rs b/src/bus/rabbit/error.rs similarity index 100% rename from src/esrs/event_bus/rabbit/error.rs rename to src/bus/rabbit/error.rs diff --git a/src/esrs/event_bus/rabbit/mod.rs b/src/bus/rabbit/mod.rs similarity index 97% rename from src/esrs/event_bus/rabbit/mod.rs rename to src/bus/rabbit/mod.rs index 54d145ab..e46420a9 100644 --- a/src/esrs/event_bus/rabbit/mod.rs +++ b/src/bus/rabbit/mod.rs @@ -9,8 +9,9 @@ use serde::Serialize; pub use config::RabbitEventBusConfig; pub use error::RabbitEventBusError; -use crate::esrs::event_bus::EventBus; -use crate::{Aggregate, StoreEvent}; +use crate::bus::EventBus; +use crate::store::StoreEvent; +use crate::Aggregate; mod config; mod error; diff --git a/src/esrs/mod.rs b/src/esrs/mod.rs deleted file mode 100644 index bff63c29..00000000 --- a/src/esrs/mod.rs +++ /dev/null @@ -1,14 +0,0 @@ -pub mod aggregate; -pub mod aggregate_manager; -pub mod aggregate_state; -pub mod event_bus; -pub mod event_handler; -pub mod event_store; -pub mod rebuilder; - -#[cfg(feature = "postgres")] -pub mod postgres; -#[cfg(feature = "sql")] -pub mod sql; - -pub type SequenceNumber = i32; diff --git a/src/esrs/event_handler.rs b/src/handler.rs similarity index 98% rename from src/esrs/event_handler.rs rename to src/handler.rs index 38d4d8ab..13f6d8b0 100644 --- a/src/esrs/event_handler.rs +++ b/src/handler.rs @@ -3,7 +3,8 @@ use std::ops::Deref; use async_trait::async_trait; use uuid::Uuid; -use crate::{Aggregate, StoreEvent}; +use crate::store::StoreEvent; +use crate::Aggregate; /// This trait is used to implement an [`EventHandler`]. An event handler is intended to be an entity /// which can create, update and delete a read side and perform side effects. diff --git a/src/lib.rs b/src/lib.rs index 957b7e40..892a9420 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -9,41 +9,23 @@ //! while using `postgres` event store, everytime a state load is required a database query is //! performed over the event store table. -pub use crate::esrs::aggregate::Aggregate; -pub use crate::esrs::aggregate_manager::AggregateManager; -pub use crate::esrs::aggregate_manager::AggregateManagerError; -pub use crate::esrs::aggregate_state::AggregateState; -#[cfg(any(feature = "kafka", feature = "rabbit"))] -pub use crate::esrs::event_bus; -pub use crate::esrs::event_handler::{EventHandler, ReplayableEventHandler, TransactionalEventHandler}; -pub use crate::esrs::event_store::{EventStore, EventStoreLockGuard, StoreEvent, UnlockOnDrop}; -#[cfg(feature = "rebuilder")] -pub use crate::esrs::rebuilder; +pub use aggregate::Aggregate; +pub use state::AggregateState; -mod esrs; +mod aggregate; +mod state; -#[cfg(feature = "postgres")] -pub mod postgres { - //! Provides implementation of the [`EventStore`] for Postgres. - pub use crate::esrs::postgres::PgStore; - pub use crate::esrs::postgres::PgStoreBuilder; - pub use crate::esrs::postgres::PgStoreError; -} +pub mod bus; +pub mod handler; +pub mod manager; +pub mod store; +#[cfg(feature = "rebuilder")] +pub mod rebuilder; #[cfg(feature = "sql")] -pub mod sql { - pub use crate::esrs::sql::event::Event; - pub use crate::esrs::sql::migrations::{Migrations, MigrationsHandler}; -} - -pub mod error { - //! All possible errors returned by this crate - pub use serde_json::Error as JsonError; - #[cfg(feature = "sql")] - pub use sqlx::Error as SqlxError; -} +pub mod sql; pub mod types { //! Provides custom types. - pub use crate::esrs::SequenceNumber; + pub type SequenceNumber = i32; } diff --git a/src/esrs/aggregate_manager.rs b/src/manager.rs similarity index 98% rename from src/esrs/aggregate_manager.rs rename to src/manager.rs index e8bca9f0..f61e6ef5 100644 --- a/src/esrs/aggregate_manager.rs +++ b/src/manager.rs @@ -2,7 +2,8 @@ use std::fmt::{Debug, Formatter}; use uuid::Uuid; -use crate::{Aggregate, AggregateState, EventStore, StoreEvent}; +use crate::store::{EventStore, StoreEvent}; +use crate::{Aggregate, AggregateState}; /// The AggregateManager is responsible for coupling the Aggregate with a Store, so that the events /// can be persisted when handled, and the state can be reconstructed by loading and apply events sequentially. diff --git a/src/esrs/rebuilder/mod.rs b/src/rebuilder/mod.rs similarity index 78% rename from src/esrs/rebuilder/mod.rs rename to src/rebuilder/mod.rs index 9d862f82..44236d1e 100644 --- a/src/esrs/rebuilder/mod.rs +++ b/src/rebuilder/mod.rs @@ -1,11 +1,11 @@ use async_trait::async_trait; -#[cfg(all(feature = "rebuilder", feature = "postgres"))] +#[cfg(feature = "postgres")] pub use pg_rebuilder::PgRebuilder; use crate::Aggregate; -#[cfg(all(feature = "rebuilder", feature = "postgres"))] +#[cfg(feature = "postgres")] mod pg_rebuilder; #[async_trait] diff --git a/src/esrs/rebuilder/pg_rebuilder.rs b/src/rebuilder/pg_rebuilder.rs similarity index 95% rename from src/esrs/rebuilder/pg_rebuilder.rs rename to src/rebuilder/pg_rebuilder.rs index 8c904a29..bf79e70c 100644 --- a/src/esrs/rebuilder/pg_rebuilder.rs +++ b/src/rebuilder/pg_rebuilder.rs @@ -3,11 +3,12 @@ use futures::StreamExt; use sqlx::{PgConnection, Pool, Postgres, Transaction}; use uuid::Uuid; -use crate::esrs::event_bus::EventBus; -use crate::esrs::postgres::PgStoreError; -use crate::esrs::rebuilder::Rebuilder; -use crate::postgres::{PgStore, PgStoreBuilder}; -use crate::{Aggregate, EventStore, ReplayableEventHandler, StoreEvent, TransactionalEventHandler}; +use crate::bus::EventBus; +use crate::handler::{ReplayableEventHandler, TransactionalEventHandler}; +use crate::rebuilder::Rebuilder; +use crate::store::postgres::{PgStore, PgStoreBuilder, PgStoreError}; +use crate::store::{EventStore, StoreEvent}; +use crate::Aggregate; pub struct PgRebuilder where diff --git a/src/esrs/sql/event.rs b/src/sql/event.rs similarity index 96% rename from src/esrs/sql/event.rs rename to src/sql/event.rs index a1e43a26..c41b3237 100644 --- a/src/esrs/sql/event.rs +++ b/src/sql/event.rs @@ -4,8 +4,8 @@ use chrono::{DateTime, Utc}; use serde_json::Value; use uuid::Uuid; +use crate::store::StoreEvent; use crate::types::SequenceNumber; -use crate::StoreEvent; /// Event representation on the event store #[derive(sqlx::FromRow, serde::Serialize, serde::Deserialize, Debug)] diff --git a/src/esrs/sql/migrations.rs b/src/sql/migrations.rs similarity index 95% rename from src/esrs/sql/migrations.rs rename to src/sql/migrations.rs index 6b76adf6..818dd1a7 100644 --- a/src/esrs/sql/migrations.rs +++ b/src/sql/migrations.rs @@ -43,12 +43,13 @@ impl MigrationsHandler for Migrations { mod tests { use sqlx::{Pool, Postgres}; - use crate::esrs::sql::migrations::{Migrations, MigrationsHandler}; + use crate::sql::migrations::{Migrations, MigrationsHandler}; use crate::Aggregate; #[sqlx::test] async fn can_read_postgres_migrations(pool: Pool) { let result = Migrations::run::(&pool).await; + dbg!(&result); assert!(result.is_ok()); } diff --git a/src/esrs/sql/mod.rs b/src/sql/mod.rs similarity index 100% rename from src/esrs/sql/mod.rs rename to src/sql/mod.rs diff --git a/src/sql/postgres/migrations/01_create_table.sql b/src/sql/postgres/migrations/01_create_table.sql new file mode 100644 index 00000000..4b493dca --- /dev/null +++ b/src/sql/postgres/migrations/01_create_table.sql @@ -0,0 +1,9 @@ +CREATE TABLE IF NOT EXISTS {0} +( + id uuid NOT NULL, + aggregate_id uuid NOT NULL, + payload jsonb NOT NULL, + occurred_on TIMESTAMPTZ NOT NULL DEFAULT current_timestamp, + sequence_number INT NOT NULL DEFAULT 1, + CONSTRAINT {0}_pkey PRIMARY KEY (id) +) \ No newline at end of file diff --git a/src/sql/postgres/migrations/02_create_index.sql b/src/sql/postgres/migrations/02_create_index.sql new file mode 100644 index 00000000..dfb3e2c9 --- /dev/null +++ b/src/sql/postgres/migrations/02_create_index.sql @@ -0,0 +1 @@ +CREATE INDEX IF NOT EXISTS {0}_aggregate_id ON {0}(aggregate_id) \ No newline at end of file diff --git a/src/sql/postgres/migrations/03_create_unique_constraint.sql b/src/sql/postgres/migrations/03_create_unique_constraint.sql new file mode 100644 index 00000000..3332b646 --- /dev/null +++ b/src/sql/postgres/migrations/03_create_unique_constraint.sql @@ -0,0 +1 @@ +CREATE UNIQUE INDEX IF NOT EXISTS {0}_aggregate_id_sequence_number ON {0}(aggregate_id, sequence_number) \ No newline at end of file diff --git a/src/sql/postgres/statements/delete_by_aggregate_id.sql b/src/sql/postgres/statements/delete_by_aggregate_id.sql new file mode 100644 index 00000000..ff89d8c3 --- /dev/null +++ b/src/sql/postgres/statements/delete_by_aggregate_id.sql @@ -0,0 +1 @@ +DELETE FROM {} WHERE aggregate_id = $1 \ No newline at end of file diff --git a/src/sql/postgres/statements/insert.sql b/src/sql/postgres/statements/insert.sql new file mode 100644 index 00000000..58739562 --- /dev/null +++ b/src/sql/postgres/statements/insert.sql @@ -0,0 +1 @@ +INSERT INTO {} (id, aggregate_id, payload, occurred_on, sequence_number) VALUES ($1, $2, $3, $4, $5) \ No newline at end of file diff --git a/src/sql/postgres/statements/select_all.sql b/src/sql/postgres/statements/select_all.sql new file mode 100644 index 00000000..4deef6fb --- /dev/null +++ b/src/sql/postgres/statements/select_all.sql @@ -0,0 +1 @@ +SELECT * FROM {} ORDER BY occurred_on, sequence_number ASC \ No newline at end of file diff --git a/src/sql/postgres/statements/select_by_aggregate_id.sql b/src/sql/postgres/statements/select_by_aggregate_id.sql new file mode 100644 index 00000000..710dbf1f --- /dev/null +++ b/src/sql/postgres/statements/select_by_aggregate_id.sql @@ -0,0 +1 @@ +SELECT * FROM {} WHERE aggregate_id = $1 ORDER BY sequence_number ASC \ No newline at end of file diff --git a/src/esrs/sql/statements.rs b/src/sql/statements.rs similarity index 100% rename from src/esrs/sql/statements.rs rename to src/sql/statements.rs diff --git a/src/esrs/aggregate_state.rs b/src/state.rs similarity index 97% rename from src/esrs/aggregate_state.rs rename to src/state.rs index 4cf1ac2e..a90f6db8 100644 --- a/src/esrs/aggregate_state.rs +++ b/src/state.rs @@ -1,7 +1,7 @@ use uuid::Uuid; -use crate::esrs::event_store::EventStoreLockGuard; -use crate::esrs::event_store::StoreEvent; +use crate::store::EventStoreLockGuard; +use crate::store::StoreEvent; use crate::types::SequenceNumber; /// The internal state for an Aggregate. diff --git a/src/esrs/event_store.rs b/src/store/mod.rs similarity index 98% rename from src/esrs/event_store.rs rename to src/store/mod.rs index 314f0f0c..4dc3170c 100644 --- a/src/esrs/event_store.rs +++ b/src/store/mod.rs @@ -5,9 +5,12 @@ use chrono::{DateTime, Utc}; use serde::{Deserialize, Serialize}; use uuid::Uuid; -use crate::esrs::aggregate_state::AggregateState; +use crate::state::AggregateState; use crate::types::SequenceNumber; +#[cfg(feature = "postgres")] +pub mod postgres; + /// Marker trait for every EventStoreLockGuard. /// /// Implementors should unlock concurrent access to the guarded resource, when dropped. diff --git a/src/esrs/postgres/builder.rs b/src/store/postgres/builder.rs similarity index 91% rename from src/esrs/postgres/builder.rs rename to src/store/postgres/builder.rs index d0c2ffcb..53cada9b 100644 --- a/src/esrs/postgres/builder.rs +++ b/src/store/postgres/builder.rs @@ -3,12 +3,12 @@ use std::sync::Arc; use sqlx::{PgConnection, Pool, Postgres}; use tokio::sync::RwLock; -use crate::esrs::event_bus::EventBus; -use crate::esrs::postgres::event_store::InnerPgStore; -use crate::esrs::postgres::PgStoreError; -use crate::esrs::sql::migrations::{Migrations, MigrationsHandler}; -use crate::esrs::sql::statements::{Statements, StatementsHandler}; -use crate::{Aggregate, EventHandler, TransactionalEventHandler}; +use crate::bus::EventBus; +use crate::handler::{EventHandler, TransactionalEventHandler}; +use crate::sql::migrations::{Migrations, MigrationsHandler}; +use crate::sql::statements::{Statements, StatementsHandler}; +use crate::store::postgres::{InnerPgStore, PgStoreError}; +use crate::Aggregate; use super::PgStore; diff --git a/src/esrs/postgres/event_store.rs b/src/store/postgres/event_store.rs similarity index 96% rename from src/esrs/postgres/event_store.rs rename to src/store/postgres/event_store.rs index c5c46460..19c74cde 100644 --- a/src/esrs/postgres/event_store.rs +++ b/src/store/postgres/event_store.rs @@ -12,13 +12,14 @@ use sqlx::{Executor, PgConnection, Pool, Postgres, Transaction}; use tokio::sync::RwLock; use uuid::Uuid; -use crate::esrs::event_bus::EventBus; -use crate::esrs::event_store::{EventStoreLockGuard, UnlockOnDrop}; -use crate::esrs::sql::event; -use crate::esrs::sql::statements::{Statements, StatementsHandler}; -use crate::postgres::PgStoreError; +use crate::bus::EventBus; +use crate::handler::{EventHandler, TransactionalEventHandler}; +use crate::sql::event; +use crate::sql::statements::{Statements, StatementsHandler}; +use crate::store::postgres::PgStoreError; +use crate::store::{EventStore, EventStoreLockGuard, StoreEvent, UnlockOnDrop}; use crate::types::SequenceNumber; -use crate::{Aggregate, AggregateState, EventHandler, EventStore, StoreEvent, TransactionalEventHandler}; +use crate::{Aggregate, AggregateState}; /// Default Postgres implementation for the [`EventStore`]. Use this struct in order to have a /// pre-made implementation of an [`EventStore`] persisting on Postgres. diff --git a/src/esrs/postgres/mod.rs b/src/store/postgres/mod.rs similarity index 100% rename from src/esrs/postgres/mod.rs rename to src/store/postgres/mod.rs diff --git a/tests/aggregate/event_handler.rs b/tests/aggregate/event_handler.rs index 6158f42e..01e36c42 100644 --- a/tests/aggregate/event_handler.rs +++ b/tests/aggregate/event_handler.rs @@ -1,6 +1,7 @@ use std::sync::{Arc, Mutex}; -use esrs::{EventHandler, StoreEvent}; +use esrs::handler::EventHandler; +use esrs::store::StoreEvent; use crate::aggregate::{TestAggregate, TestEvent}; diff --git a/tests/aggregate/transactional_event_handler.rs b/tests/aggregate/transactional_event_handler.rs index 9345fd45..3a6e408c 100644 --- a/tests/aggregate/transactional_event_handler.rs +++ b/tests/aggregate/transactional_event_handler.rs @@ -1,8 +1,9 @@ use sqlx::PgConnection; use uuid::Uuid; -use esrs::postgres::PgStoreError; -use esrs::{StoreEvent, TransactionalEventHandler}; +use esrs::handler::TransactionalEventHandler; +use esrs::store::postgres::PgStoreError; +use esrs::store::StoreEvent; use crate::aggregate::{TestAggregate, TestEvent}; diff --git a/tests/kafka/mod.rs b/tests/kafka/mod.rs index 4b85b0f5..b6a182a0 100644 --- a/tests/kafka/mod.rs +++ b/tests/kafka/mod.rs @@ -5,9 +5,9 @@ use rdkafka::consumer::{CommitMode, Consumer, StreamConsumer}; use rdkafka::ClientConfig; use uuid::Uuid; -use esrs::event_bus::kafka::{KafkaEventBus, KafkaEventBusConfig}; -use esrs::event_bus::EventBus; -use esrs::StoreEvent; +use esrs::bus::kafka::{KafkaEventBus, KafkaEventBusConfig}; +use esrs::bus::EventBus; +use esrs::store::StoreEvent; use crate::aggregate::{TestAggregate, TestEvent}; diff --git a/tests/postgres/builder.rs b/tests/postgres/builder.rs index 467bd54b..f3ba3fad 100644 --- a/tests/postgres/builder.rs +++ b/tests/postgres/builder.rs @@ -1,8 +1,9 @@ -use esrs::Aggregate; use sqlx::{Pool, Postgres}; +use esrs::store::postgres::{PgStore, PgStoreBuilder}; +use esrs::Aggregate; + use crate::aggregate::TestAggregate; -use esrs::postgres::{PgStore, PgStoreBuilder}; #[sqlx::test] async fn builder_can_skip_migrations_test(pool: Pool) { diff --git a/tests/postgres/manager.rs b/tests/postgres/manager.rs index c8c3bd43..b574d586 100644 --- a/tests/postgres/manager.rs +++ b/tests/postgres/manager.rs @@ -3,8 +3,9 @@ use std::time::Duration; use sqlx::{Pool, Postgres}; -use esrs::postgres::{PgStore, PgStoreBuilder}; -use esrs::{AggregateManager, AggregateState}; +use esrs::manager::AggregateManager; +use esrs::store::postgres::{PgStore, PgStoreBuilder}; +use esrs::AggregateState; use crate::aggregate::{TestAggregate, TestAggregateState, TestCommand}; diff --git a/tests/postgres/pg_store.rs b/tests/postgres/pg_store.rs index 89b1a6b6..c6eea83a 100644 --- a/tests/postgres/pg_store.rs +++ b/tests/postgres/pg_store.rs @@ -3,8 +3,9 @@ use std::sync::{Arc, Mutex, MutexGuard}; use sqlx::{Pool, Postgres}; use uuid::Uuid; -use esrs::postgres::{PgStore, PgStoreBuilder, PgStoreError}; -use esrs::{Aggregate, AggregateState, EventStore, StoreEvent}; +use esrs::store::postgres::{PgStore, PgStoreBuilder, PgStoreError}; +use esrs::store::{EventStore, StoreEvent}; +use esrs::{Aggregate, AggregateState}; use crate::aggregate::{TestAggregate, TestAggregateState, TestEvent, TestEventHandler, TestTransactionalEventHandler}; diff --git a/tests/rabbit/mod.rs b/tests/rabbit/mod.rs index 7011376a..f766c7f8 100644 --- a/tests/rabbit/mod.rs +++ b/tests/rabbit/mod.rs @@ -5,9 +5,9 @@ use lapin::types::FieldTable; use lapin::{Connection, ConnectionProperties, Consumer, ExchangeKind}; use uuid::Uuid; -use esrs::event_bus::rabbit::{RabbitEventBus, RabbitEventBusConfig}; -use esrs::event_bus::EventBus; -use esrs::StoreEvent; +use esrs::bus::rabbit::{RabbitEventBus, RabbitEventBusConfig}; +use esrs::bus::EventBus; +use esrs::store::StoreEvent; use crate::aggregate::{TestAggregate, TestEvent};