Example #1
0
        public async Task <IActionResult> ExcluirFluxoAutomaticoAcao(int Id_TipoSituacaoAcomodacaoOrigem, int Id_TipoAtividadeAcomodacaoOrigem, int Id_TipoAcaoAcomodacaoOrigem, int Id_TipoSituacaoAcomodacaoDestino, int Id_TipoAtividadeAcomodacaoDestino, int IdEmpresa)
        {
            if (Id_TipoSituacaoAcomodacaoOrigem < 1 || Id_TipoAtividadeAcomodacaoOrigem < 1 || Id_TipoAcaoAcomodacaoOrigem < 1 || Id_TipoSituacaoAcomodacaoDestino < 1 || Id_TipoAtividadeAcomodacaoDestino < 1 || IdEmpresa < 1)
            {
                return(BadRequest());
            }

            var fluxoAutomaticoAcaoToDelete = _configuracaoContext.FluxoAutomaticoAcaoItems
                                              .OfType <FluxoAutomaticoAcaoItem>()
                                              .SingleOrDefault(c => c.Id_TipoSituacaoAcomodacaoOrigem == Id_TipoSituacaoAcomodacaoOrigem && c.Id_TipoAtividadeAcomodacaoOrigem == Id_TipoAtividadeAcomodacaoOrigem && c.Id_TipoAcaoAcomodacaoOrigem == Id_TipoAcaoAcomodacaoOrigem && c.Id_TipoSituacaoAcomodacaoDestino == Id_TipoSituacaoAcomodacaoDestino && c.Id_TipoAtividadeAcomodacaoDestino == Id_TipoAtividadeAcomodacaoDestino && c.Id_Empresa == IdEmpresa);

            if (fluxoAutomaticoAcaoToDelete is null)
            {
                return(BadRequest());
            }

            _configuracaoContext.FluxoAutomaticoAcaoItems.Remove(fluxoAutomaticoAcaoToDelete);

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

            // Achieving atomicity between original Catalog database operation and the IntegrationEventLog thanks to a local transaction
            await _configuracaoIntegrationEventService.DeleteEventAndFluxoAutomaticoAcaoContextChangesAsync(FluxoAutomaticoAcaoExclusaoEvent);

            // Publish through the Event Bus and mark the saved event as published
            await _configuracaoIntegrationEventService.PublishThroughEventBusAsync(FluxoAutomaticoAcaoExclusaoEvent);

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