Ejemplo n.º 1
0
    /// <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);
    }
Ejemplo n.º 2
0
    /// <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());
    }