Example #1
0
        public async Task <IActionResult> IncluirFluxoAutomaticoAcao([FromBody] FluxoAutomaticoAcaoItem FluxoAutomaticoAcaoToSave)
        {
            string msgRule = "";

            _configuracaoContext.FluxoAutomaticoAcaoItems.Add(FluxoAutomaticoAcaoToSave);

            //Create Integration Event to be published through the Event Bus
            var fluxoAutomaticoAcaoSaveEvent = new FluxoAutomaticoAcaoIncluirIE(FluxoAutomaticoAcaoToSave.Id_TipoSituacaoAcomodacaoOrigem, FluxoAutomaticoAcaoToSave.Id_TipoAtividadeAcomodacaoOrigem, FluxoAutomaticoAcaoToSave.Id_TipoAcaoAcomodacaoOrigem, FluxoAutomaticoAcaoToSave.Id_TipoSituacaoAcomodacaoDestino, FluxoAutomaticoAcaoToSave.Id_TipoAtividadeAcomodacaoDestino, FluxoAutomaticoAcaoToSave.Id_Empresa);

            try
            {
                // Achieving atomicity between original Catalog database operation and the IntegrationEventLog thanks to a local transaction
                await _configuracaoIntegrationEventService.IncluirEventAndFluxoAutomaticoAcaoContextChangesAsync(fluxoAutomaticoAcaoSaveEvent);
            }
            catch (Exception e)
            {
                //Validações das CONSTRAINTS do BANCO
                if (ruleValidaFluxoAutomaticoPK(e.Message, ref msgRule))
                {
                    return(BadRequest(msgRule));
                }
                else
                {
                    return(BadRequest(e.Message));
                }
            }
            // Publish through the Event Bus and mark the saved event as published
            await _configuracaoIntegrationEventService.PublishThroughEventBusAsync(fluxoAutomaticoAcaoSaveEvent);


            return(CreatedAtAction(nameof(IncluirFluxoAutomaticoAcao), null));
        }