コード例 #1
0
        Composer Composer.Compensate(Func <Compensation, CompensationResult> compensation)
        {
            _composer.Compensate(x =>
            {
                var taskCompensation = new CompensationProxy <Unit>(x);

                CompensationResult compensationResult = compensation(taskCompensation);

                var result = compensationResult as CompensationResult <Unit>;
                if (result != null)
                {
                    return(result);
                }

                Func <Task <Unit> > awaiter = async() =>
                {
                    await compensationResult.Task;

                    return(x.Payload);
                };

                return(x.Task(awaiter()));
            });

            return(this);
        }
コード例 #2
0
        public async Task Send(CompensateActivityContext <TLog> context, IPipe <CompensateActivityContext <TLog> > next)
        {
            if (_log.IsDebugEnabled)
            {
                _log.DebugFormat("Compensating: {0}", context.TrackingNumber);
            }

            try
            {
                try
                {
                    CompensationResult result = await context.Activity.Compensate(context);

                    await result.Evaluate();

                    await next.Send(context);
                }
                catch (Exception ex)
                {
                    CompensationResult result = context.Failed(ex);

                    await result.Evaluate();
                }
            }
            catch (Exception ex)
            {
                _log.Error($"The activity {TypeMetadataCache.GetShortName(context.Activity.GetType())} threw an exception", ex);

                throw;
            }
        }
コード例 #3
0
        public IActionResult CreateCompensation([FromBody] Compensation compensation)
        {
            compensation.Employee = GetEmployeeById(compensation.Employee.EmployeeId);
            _logger.LogDebug($"Received Compensation create request for '{compensation.Employee.FirstName} {compensation.Employee.LastName}'");

            _employeeService.CreateCompensation(compensation);
            CompensationResult result = new CompensationResult();

            result.Employee      = compensation.Employee;
            result.EffectiveDate = compensation.EffectiveDate;
            result.Salary        = compensation.Salary;
            return(CreatedAtRoute("getCompensationByEmployeeId", new { id = compensation.Employee.EmployeeId }, result));
        }
コード例 #4
0
        public IActionResult GetCompensationEmployeeById(String id)
        {
            _logger.LogDebug($"Received Compensation get request for '{id}'");

            var compensation = _employeeService.GetCompensationByEmployeeId(id);

            if (compensation == null)
            {
                return(NotFound());
            }
            CompensationResult result = new CompensationResult();

            result.Employee      = compensation.Employee;
            result.EffectiveDate = compensation.EffectiveDate;
            result.Salary        = compensation.Salary;
            return(Ok(result));
        }
コード例 #5
0
        void Consumes <IConsumeContext <RoutingSlip> > .All.Consume(IConsumeContext <RoutingSlip> context)
        {
            Compensation <TLog> compensation = new HostCompensation <TLog>(context);

            if (_log.IsDebugEnabled)
            {
                _log.DebugFormat("Host: {0} Compensating: {1}", compensation.Bus.Endpoint.Address,
                                 compensation.TrackingNumber);
            }

            try
            {
                CompensationResult result = _activityFactory.CompensateActivity(compensation);
            }
            catch (Exception ex)
            {
                compensation.Failed(ex);
            }
        }
コード例 #6
0
 public CompensationResultProxy(CompensationResult <T> result)
 {
     _result = result;
 }