Class DefaultSnapshotStore

java.lang.Object
io.fluxzero.sdk.persisting.eventsourcing.DefaultSnapshotStore
All Implemented Interfaces:
SnapshotStore

public class DefaultSnapshotStore extends Object implements SnapshotStore
Default implementation of the SnapshotStore interface.

Snapshots are stored as documents, keyed by aggregate id and sequence number. The latest snapshot is loaded by sorting on the stored sequence number, while older snapshots can be retrieved to support historical Entity.previous() traversal.

  • Constructor Details

    • DefaultSnapshotStore

      public DefaultSnapshotStore()
  • Method Details

    • storeSnapshot

      public <T> CompletableFuture<Void> storeSnapshot(Entity<T> snapshot)
      Description copied from interface: SnapshotStore
      Stores a new snapshot for the given aggregate entity.

      The snapshot typically contains the latest known state and metadata such as the aggregate ID and sequence number. Storing a snapshot will overwrite any existing snapshot for the same aggregate ID.

      Specified by:
      storeSnapshot in interface SnapshotStore
      Type Parameters:
      T - The aggregate root type.
      Parameters:
      snapshot - The aggregate entity to be stored as a snapshot.
      Returns:
      A CompletableFuture indicating whether the operation completed successfully.
    • getSnapshot

      public <T> Optional<Entity<T>> getSnapshot(Object aggregateId)
      Description copied from interface: SnapshotStore
      Retrieves the most recent snapshot for a given aggregate ID, if available.
      Specified by:
      getSnapshot in interface SnapshotStore
      Type Parameters:
      T - The expected type of the aggregate.
      Parameters:
      aggregateId - The ID of the aggregate for which to retrieve a snapshot.
      Returns:
      An Optional containing the aggregate snapshot if present, otherwise empty.
    • getSnapshotBefore

      public <T> Optional<Entity<T>> getSnapshotBefore(Object aggregateId, long sequenceNumberExclusive)
      Description copied from interface: SnapshotStore
      Retrieves the most recent snapshot with a sequence number strictly lower than the given value.
      Specified by:
      getSnapshotBefore in interface SnapshotStore
      Type Parameters:
      T - The expected aggregate type.
      Parameters:
      aggregateId - The aggregate identifier.
      sequenceNumberExclusive - Upper bound (exclusive) for the snapshot sequence number.
      Returns:
      An Optional containing the matching snapshot if present.
    • deleteSnapshot

      public CompletableFuture<Void> deleteSnapshot(Object aggregateId)
      Description copied from interface: SnapshotStore
      Deletes the snapshot for the specified aggregate ID.
      Specified by:
      deleteSnapshot in interface SnapshotStore
      Parameters:
      aggregateId - The ID of the aggregate whose snapshot should be deleted.
      Returns:
      A CompletableFuture indicating completion of the deletion operation.
    • findSnapshot

      protected <T> Optional<Entity<T>> findSnapshot(Object aggregateId, Long sequenceNumberExclusive)
    • trimSnapshots

      protected CompletableFuture<Void> trimSnapshots(Entity<?> snapshot)
    • deserializeSnapshot

      protected <T> Optional<Entity<T>> deserializeSnapshot(DefaultSnapshotStore.SnapshotDocument document)