/// <inheritdoc /> public override async Task <ReplayProjectionResponse> Replay(ReplayProjectionRequest request, ServerCallContext context) { var response = new ReplayProjectionResponse(); var getIds = GetScopeAndProjectionIds(request.ScopeId, request.ProjectionId, out var scope, out var projection); if (!getIds.Success) { response.Failure = _exceptionToFailureConverter.ToFailure(getIds.Exception); return(response); } Log.Replay(_logger, projection, scope); var result = request.TenantId == null ? await _projections.ReplayEventsForAllTenants(scope, projection).ConfigureAwait(false) : await _projections.ReplayEventsForTenant(scope, projection, request.TenantId.ToGuid()).ConfigureAwait(false); if (!result.Success) { Log.FailedToReplayProjection(_logger, projection, scope, result.Exception); response.Failure = _exceptionToFailureConverter.ToFailure(result.Exception); } return(response); }
/// <inheritdoc /> public async Task <Try> Replay(MicroserviceAddress runtime, ScopeId scope, ProjectionId projection, TenantId tenant = null) { var client = _clients.CreateClientFor <ProjectionsClient>(runtime); var request = new ReplayProjectionRequest { ScopeId = scope.ToProtobuf(), ProjectionId = projection.ToProtobuf(), TenantId = tenant?.ToProtobuf(), }; var response = await client.ReplayAsync(request); if (response.Failure != null) { return(new ReplayProjectionFailed(scope, projection, response.Failure.Reason)); } return(Try.Succeeded()); }