Wolverine 6.28.0
Storage agnostic conventions wave: write handlers and HTTP endpoints that read and append without naming a store.
Highlights
Storage.AppendEvents()/Storage.StartStream()(#3934) — event stream counterparts toStorage.Store(), expressed entirely againstJasperFx.Events.IEventOperations, so the same handler is valid on Marten, Polecat or Fisher with noIDocumentSession.[FirstOrDefault](#3933) — the singleton document[Entity]cannot express, since it has no identity to look up by.[All]and[Queryable](#3936) — every document of a type as anIReadOnlyList<T>, and a rawIQueryable<T>escape hatch.- Batched reads (#3938) — on Marten, Polecat and Fisher, two or more batchable reads in the same handler now resolve in a single database round trip. Nothing to turn on.
OnMissing.EmptyContentWith204,[NoContentIfMissing]/[NotFoundIfMissing](#3931) — answer an empty 204 instead of a 404 when there is simply nothing to return.DateTime/DateTimeOffset nowin Wolverine.HTTP (#3932) — matches the long standing message handler convention. Previously such a parameter silently bound from the query string and arrived asdefault.
Notable fix
An IEventStoreOperations / IEventOperations handler or endpoint parameter now resolves and commits (#3936). CanApply recognized no event operations type, so AutoApplyTransactions skipped those chains and appended events were queued into the session's unit of work and never committed — with no exception thrown. This also affected each store's own event operations types, so it predates this release.
Also: [All] / [Queryable] / [FirstOrDefault] provider errors now name the declaring method (#3937).
Full detail in CHANGELOG.md.