java.lang.Object
dk.cloudcreate.essentials.components.eventsourced.aggregates.snapshot.PostgresqlAggregateSnapshotRepository
All Implemented Interfaces:
AggregateSnapshotRepository

public class PostgresqlAggregateSnapshotRepository extends Object implements AggregateSnapshotRepository
  • Field Details

    • DEFAULT_AGGREGATE_SNAPSHOTS_TABLE_NAME

      public static final String DEFAULT_AGGREGATE_SNAPSHOTS_TABLE_NAME
      See Also:
  • Constructor Details

  • Method Details

    • loadSnapshot

      public <ID, AGGREGATE_IMPL_TYPE> Optional<AggregateSnapshot<ID,AGGREGATE_IMPL_TYPE>> loadSnapshot(AggregateType aggregateType, ID aggregateId, EventOrder withLastIncludedEventOrderLessThanOrEqualTo, Class<AGGREGATE_IMPL_TYPE> aggregateImplType)
      Specified by:
      loadSnapshot in interface AggregateSnapshotRepository
      Type Parameters:
      ID - the aggregate ID type
      AGGREGATE_IMPL_TYPE - the concrete aggregate implementation type
      Parameters:
      aggregateType - the aggregate type (determining the aggregate's event stream name)
      aggregateId - the identifier for the aggregate instance
      withLastIncludedEventOrderLessThanOrEqualTo - the snapshot returned must have AggregateSnapshot.eventOrderOfLastIncludedEvent that is less than or equal to this value
      aggregateImplType - the concrete aggregate implementation type
      Returns:
      the aggregate snapshot wrapped in an Optional if a snapshot was found, otherwise Optional.empty()
    • aggregateUpdated

      public <ID, AGGREGATE_IMPL_TYPE> void aggregateUpdated(AGGREGATE_IMPL_TYPE aggregate, AggregateEventStream<ID> persistedEvents)
      Description copied from interface: AggregateSnapshotRepository
      Callback from an Aggregate Repository to notify that the aggregate has been updated
      Specified by:
      aggregateUpdated in interface AggregateSnapshotRepository
      Type Parameters:
      ID - the aggregate ID type
      AGGREGATE_IMPL_TYPE - the concrete aggregate implementation type
      Parameters:
      aggregate - the aggregate instance after the changes (in the form of events) has been marked as committed within the aggregate
      persistedEvents - the aggregate changes (in the form of events) after they've been persisted
    • findMostRecentLastIncludedEventOrderFor

      protected Optional<EventOrder> findMostRecentLastIncludedEventOrderFor(String serializedAggregateId, String aggregateImplType, dk.cloudcreate.essentials.components.foundation.transaction.jdbi.HandleAwareUnitOfWork uow)
    • loadAllSnapshots

      public <ID, AGGREGATE_IMPL_TYPE> List<AggregateSnapshot<ID,AGGREGATE_IMPL_TYPE>> loadAllSnapshots(AggregateType aggregateType, ID aggregateId, Class<AGGREGATE_IMPL_TYPE> aggregateImplType, boolean includeSnapshotPayload)
      Description copied from interface: AggregateSnapshotRepository
      Load all AggregateSnapshot's related to the given aggregate instance
      Specified by:
      loadAllSnapshots in interface AggregateSnapshotRepository
      Type Parameters:
      ID - the aggregate ID type
      AGGREGATE_IMPL_TYPE - the concrete aggregate implementation type
      Parameters:
      aggregateType - the aggregate type (determining the aggregate's event stream name)
      aggregateId - the identifier for the aggregate instance
      aggregateImplType - the concrete aggregate implementation type
      includeSnapshotPayload - should the AggregateSnapshot.aggregateSnapshot be loaded?
      Returns:
      list of all AggregateSnapshot's in ascending AggregateSnapshot.eventOrderOfLastIncludedEvent order (the oldest snapshot first) related to the given aggregate instance
    • loadAllSnapshots

      protected <ID, AGGREGATE_IMPL_TYPE> List<AggregateSnapshot<ID,AGGREGATE_IMPL_TYPE>> loadAllSnapshots(String serializedAggregateId, String aggregateImplType, boolean includeSnapshotPayload, dk.cloudcreate.essentials.components.foundation.transaction.jdbi.HandleAwareUnitOfWork uow)
    • deleteAllSnapshots

      public <AGGREGATE_IMPL_TYPE> void deleteAllSnapshots(Class<AGGREGATE_IMPL_TYPE> ofAggregateImplementationType)
      Description copied from interface: AggregateSnapshotRepository
      Delete all snapshots for the given aggregate implementation type
      Specified by:
      deleteAllSnapshots in interface AggregateSnapshotRepository
      Type Parameters:
      AGGREGATE_IMPL_TYPE - the concrete aggregate implementation type
      Parameters:
      ofAggregateImplementationType - the concrete aggregate implementation type that we want to delete all snapshots for
    • deleteSnapshots

      public <ID, AGGREGATE_IMPL_TYPE> void deleteSnapshots(AggregateType aggregateType, ID aggregateId, Class<AGGREGATE_IMPL_TYPE> withAggregateImplementationType)
      Description copied from interface: AggregateSnapshotRepository
      Delete all snapshots for the given aggregate instance with the given aggregate implementation type
      Specified by:
      deleteSnapshots in interface AggregateSnapshotRepository
      Type Parameters:
      ID - the aggregate ID type
      AGGREGATE_IMPL_TYPE - the concrete aggregate implementation type
      Parameters:
      aggregateType - the aggregate type (determining the aggregate's event stream name)
      aggregateId - the id of the aggregate that we want to delete all snapshots for
      withAggregateImplementationType - the concrete aggregate implementation type that we want to delete all snapshots for
    • deleteSnapshots

      public <ID, AGGREGATE_IMPL_TYPE> void deleteSnapshots(AggregateType aggregateType, ID aggregateId, Class<AGGREGATE_IMPL_TYPE> withAggregateImplementationType, List<EventOrder> snapshotEventOrdersToDelete)
      Description copied from interface: AggregateSnapshotRepository
      Delete all snapshots with a given AggregateSnapshot.eventOrderOfLastIncludedEvent for the given aggregate instance, with the given aggregate implementation type
      Specified by:
      deleteSnapshots in interface AggregateSnapshotRepository
      Type Parameters:
      ID - the aggregate ID type
      AGGREGATE_IMPL_TYPE - the concrete aggregate implementation type
      Parameters:
      aggregateType - the aggregate type (determining the aggregate's event stream name)
      aggregateId - the id of the aggregate that we want to delete all snapshots for
      withAggregateImplementationType - the concrete aggregate implementation type that we want to delete all snapshots for
      snapshotEventOrdersToDelete - The list of AggregateSnapshot.eventOrderOfLastIncludedEvent 's that should be deleted