Example #1
0
        public async Task <IActionResult> ExcluirTipoAcaoAcomodacao(int id_TipoAcaoAcomodacao)
        {
            if (id_TipoAcaoAcomodacao < 1)
            {
                return(BadRequest());
            }

            var tipoAcaoAcomodacaoToDelete = _configuracaoContext.TipoAcaoAcomodacaoItems
                                             .OfType <TipoAcaoAcomodacaoItem>()
                                             .SingleOrDefault(c => c.Id_TipoAcaoAcomodacao == id_TipoAcaoAcomodacao);

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

            _configuracaoContext.TipoAcaoAcomodacaoItems.Remove(tipoAcaoAcomodacaoToDelete);

            //Create Integration Event to be published through the Event Bus
            var TipoAcaoAcomodacaoExclusaoEvent = new TipoSituacaoAcomodacaoExclusaoIE(tipoAcaoAcomodacaoToDelete.Id_TipoAcaoAcomodacao);

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

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

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