public async Task <ActionResult <Book> > RollBackAsync(string id, RollbackRequest request, [FromQuery] string reason = null) { var result = await _snapshots.GetAsync(ObjectType.Book, request.SnapshotId); if (!result.TryPickT0(out var snapshot, out _)) { return(ResultUtilities.NotFound(request.SnapshotId)); } var rollbackResult = await _snapshots.RollbackAsync <DbBook>(snapshot, new SnapshotArgs { Committer = User, Event = SnapshotEvent.AfterRollback, Reason = reason, Rollback = snapshot, Source = SnapshotSource.User }); if (!rollbackResult.TryPickT0(out var value, out _)) { return(ResultUtilities.NotFound(id)); } var(book, _) = value; return(book.Convert(_services)); }