1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
use cqrs_es::{Aggregate, AggregateContext};
/// Holds context for the pure event store implementation PostgresStore.
/// This is only used internally within the `EventStore`.
pub struct EventStoreAggregateContext<A: Aggregate> {
/// The aggregate ID of the aggregate instance that has been loaded.
pub aggregate_id: String,
/// The current state of the aggregate instance.
pub aggregate: A,
/// The last committed event sequence number for this aggregate instance.
pub current_sequence: usize,
}
impl<A: Aggregate> AggregateContext<A> for EventStoreAggregateContext<A> {
fn aggregate(&self) -> &A {
&self.aggregate
}
}
/// Holds context for the snapshot-sourced implementation PostgresSnapshotStore.
/// This is only used internally within the `EventStore`.
#[derive(Debug, PartialEq)]
pub struct SnapshotStoreAggregateContext<A>
where
A: Aggregate,
{
/// The aggregate ID of the aggregate instance that has been loaded.
pub aggregate_id: String,
/// The current state of the aggregate instance.
pub aggregate: A,
/// The last committed event sequence number for this aggregate instance.
pub current_sequence: usize,
/// The last committed snapshot version for this aggregate instance.
pub current_snapshot: usize,
}
impl<A> AggregateContext<A> for SnapshotStoreAggregateContext<A>
where
A: Aggregate,
{
fn aggregate(&self) -> &A {
&self.aggregate
}
}
/// A data structure maintaining context when updating views.
pub struct QueryContext {
/// Unique identifier of the view instance that is being modified.
pub view_instance_id: String,
/// The current version of the view instance, used for optimistic locking.
pub version: i64,
}
impl QueryContext {
/// Convenience function to create a new QueryContext.
pub fn new(view_instance_id: String, version: i64) -> Self {
Self {
view_instance_id,
version,
}
}
}