public static StateDetailDto ToStateDetailDto(this StateDetail stateDetail, string businessEntityId) => new StateDetailDto
 {
     Id = stateDetail.Id,
     BusinessEntityId = businessEntityId,
     State            = stateDetail.State,
     TimeStampUtc     = stateDetail.TimeStampUtc
 };
Exemple #2
0
        public async Task AddStateDetailUsingCustomOutbox(string businessEntityId, StateDetail detail)
        {
            var dto = detail.ToStateDetailDto(businessEntityId);

            // begin DB transaction
            await using var transaction = await _stateDetailContext.Database.BeginTransactionAsync();

            _outboxMessageBus.SetTransaction(transaction);

            // persist new state details to DB
            dto.TimeStampUtc = DateTime.UtcNow;
            dto = (await _stateDetailContext.StateDetails.AddAsync(dto)).Entity;
            await _stateDetailContext.SaveChangesAsync();

            // publish message to outbox message bus
            var stateDetail = dto.ToStateDetail();

            _outboxMessageBus.Publish(nameof(StateUpdated), new StateUpdated
            {
                BusinessEntityId = dto.BusinessEntityId,
                Details          = stateDetail
            });

            // commit transaction
            await transaction.CommitAsync();
        }
        public async Task <IActionResult> UpdateStateUsingNServiceBusOutbox(string businessEntityId, [FromBody] StateDetail details)
        {
            await _commandService.AddStateDetailUsingNServiceBusOutbox(businessEntityId, details);

            return(Ok());
        }
Exemple #4
0
 // The outbox works only in an NServiceBus message handler
 public async Task AddStateDetailUsingNServiceBusOutbox(string businessEntityId, StateDetail detail)
 => await _messageSession.SendLocal(new UpdateState
 {
     BusinessEntityId = businessEntityId,
     Details          = detail
 });