public async Task <IActionResult> IncluirChecklistTipoSituacaoTipoAtividadeTipoAcomodacao([FromBody] ChecklistTipoSituacaoTipoAtividadeTipoAcomodacaoItem checklistTipoSituacaoTipoAtividadeTipoAcomodacaoToSave) { string msgRule = ""; _configuracaoContext.ChecklistTipoSituacaoTipoAtividadeTipoAcomodacaoItems.Add(checklistTipoSituacaoTipoAtividadeTipoAcomodacaoToSave); //Create Integration Event to be published through the Event Bus var checklistTipoSituacaoTATAcomodacaoSaveEvent = new ChecklistTipoSituacaoTATAIncluirIE(checklistTipoSituacaoTipoAtividadeTipoAcomodacaoToSave.Id_Checklist, checklistTipoSituacaoTipoAtividadeTipoAcomodacaoToSave.Id_TipoSituacaoAcomodacao, checklistTipoSituacaoTipoAtividadeTipoAcomodacaoToSave.Id_TipoAtividadeAcomodacao, checklistTipoSituacaoTipoAtividadeTipoAcomodacaoToSave.Id_TipoAcomodacao, checklistTipoSituacaoTipoAtividadeTipoAcomodacaoToSave.Id_Empresa, checklistTipoSituacaoTipoAtividadeTipoAcomodacaoToSave.Id_CheckTSTAT); try { // Achieving atomicity between original Catalog database operation and the IntegrationEventLog thanks to a local transaction await _configuracaoIntegrationEventService.IncluirEventAndChecklistTipoSituacaoTipoAtividadeTipoAcomodacaoContextChangesAsync(checklistTipoSituacaoTATAcomodacaoSaveEvent, checklistTipoSituacaoTipoAtividadeTipoAcomodacaoToSave); } catch (Exception e) { return(BadRequest(e.Message)); } // Publish through the Event Bus and mark the saved event as published await _configuracaoIntegrationEventService.PublishThroughEventBusAsync(checklistTipoSituacaoTATAcomodacaoSaveEvent); return(CreatedAtAction(nameof(IncluirChecklistTipoSituacaoTipoAtividadeTipoAcomodacao), null)); }
public async Task IncluirEventAndChecklistTipoSituacaoTipoAtividadeTipoAcomodacaoContextChangesAsync(IntegrationEvent evt, ChecklistTipoSituacaoTipoAtividadeTipoAcomodacaoItem ChecklistTipoSituacaoTipoAtividadeTipoAcomodacaoToSave) { var strategy = _configuracaoContext.Database.CreateExecutionStrategy(); await strategy.ExecuteAsync(async() => { using (var transaction = _configuracaoContext.Database.BeginTransaction()) { try { await _configuracaoContext.SaveChangesAsync(); //Tratamento de Identity ((Events.ChecklistTipoSituacaoTATAIncluirIE)evt).CheckTSTATId = ChecklistTipoSituacaoTipoAtividadeTipoAcomodacaoToSave.Id_CheckTSTAT; await _eventLogService.SaveEventAsync(evt, _configuracaoContext.Database.CurrentTransaction.GetDbTransaction()); transaction.Commit(); } catch (Exception ex) { transaction.Rollback(); var sqlException = ex.InnerException as System.Data.SqlClient.SqlException; throw new Exception(sqlException.Number + "::" + sqlException.Message); } } }); }