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));
        }
Esempio n. 2
0
 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);
             }
         }
     });
 }