async Task <ProjectionStream> LoadProjectionStreamAsync(Type projectionType, IBlobId projectionId) { string projectionName = projectionType.GetContractId(); ReadResult <ProjectionVersions> result = GetProjectionVersions(projectionName); if (result.IsSuccess) { ProjectionVersion liveVersion = result.Data.GetLive(); if (liveVersion is null) { log.Warn(() => $"Unable to find projection `live` version. ProjectionId:{projectionId} ProjectionName:{projectionName} ProjectionType:{projectionType.Name}"); return(ProjectionStream.Empty()); } ISnapshot snapshot = null; if (projectionType.IsSnapshotable()) { snapshot = snapshotStore.Load(projectionName, projectionId, liveVersion); } else { snapshot = new NoSnapshot(projectionId, projectionName); } ProjectionStream stream = await LoadProjectionStreamAsync(projectionType, liveVersion, projectionId, snapshot); return(stream); } return(ProjectionStream.Empty()); }
ProjectionStream LoadProjectionStream(Type projectionType, IBlobId projectionId) { string projectionName = projectionType.GetContractId(); ReadResult <ProjectionVersions> result = GetProjectionVersions(projectionName); if (result.IsSuccess) { ProjectionVersion liveVersion = result.Data.GetLive(); if (liveVersion is null) { log.Warn(() => $"Unable to find projection `live` version. ProjectionId:{projectionId} ProjectionName:{projectionName} ProjectionType:{projectionType.Name}{Environment.NewLine}AvailableVersions:{Environment.NewLine}{result.Data.ToString()}"); return(ProjectionStream.Empty()); } ISnapshot snapshot = null; if (projectionType.IsSnapshotable()) { snapshot = snapshotStore.Load(projectionName, projectionId, liveVersion); } else { snapshot = new NoSnapshot(projectionId, projectionName); } return(LoadProjectionStream(projectionType, liveVersion, projectionId, snapshot)); } return(ProjectionStream.Empty()); }
ProjectionStream LoadProjectionStream(Type projectionType, IBlobId projectionId) { string projectionName = projectionType.GetContractId(); try { ProjectionVersion liveVersion = GetProjectionVersions(projectionName).GetLive(); if (ReferenceEquals(null, liveVersion)) { log.Warn(() => $"Unable to find `live` version for projection with contract id {projectionName} and name {projectionType.Name}"); return(ProjectionStream.Empty()); } ISnapshot snapshot = snapshotStore.Load(projectionName, projectionId, liveVersion); ProjectionStream stream = LoadProjectionStream(projectionType, liveVersion, projectionId, snapshot); return(stream); } catch (Exception ex) { log.ErrorException($"Unable to load projection stream. ProjectionId:{projectionId} ProjectionContractId:{projectionName} ProjectionName:{projectionType.Name}", ex); return(ProjectionStream.Empty()); } }
private async Task <ProjectionStream> LoadProjectionStreamAsync(Type projectionType, IBlobId projectionId) { string projectionName = projectionType.GetContractId(); ReadResult <ProjectionVersions> result = await GetProjectionVersionsAsync(projectionName).ConfigureAwait(false); if (result.IsSuccess) { ProjectionVersion liveVersion = result.Data.GetLive(); if (liveVersion is null) { log.Warn(() => $"Unable to find projection `live` version. {Environment.NewLine}AvailableVersions:{Environment.NewLine}{result.Data.ToString()}"); return(ProjectionStream.Empty()); } ISnapshot snapshot = projectionType.IsSnapshotable() ? await snapshotStore.LoadAsync(projectionName, projectionId, liveVersion).ConfigureAwait(false) : new NoSnapshot(projectionId, projectionName); return(await LoadProjectionStreamAsync(liveVersion, projectionId, snapshot)); } return(ProjectionStream.Empty()); }