Ejemplo n.º 1
0
        private async Task TipoAcomodacaoIncluir(Guid EmpresaId, EmpresaInclusaoIntegrationEvent @event)
        {
            using (_tipoAcomodacaoContext)
            {
                List <TipoAcomodacaoItem> list    = new List <TipoAcomodacaoItem>();
                var lstTipoAcomodacaoDefaultNames = _tipoAcomodacaoContext.TipoAcomodacaoDefaultItems.FromSql("SELECT * FROM DefaultTipoAcomodacao").ToList();
                foreach (TipoAcomodacaoDefaultItem it in lstTipoAcomodacaoDefaultNames)
                {
                    Guid gKey;
                    gKey = Guid.NewGuid();
                    TipoAcomodacaoItem tipoAcomodacaoToSave = new TipoAcomodacaoItem();
                    tipoAcomodacaoToSave.Id_TipoAcomodacao   = gKey;
                    tipoAcomodacaoToSave.Id_Empresa          = EmpresaId;
                    tipoAcomodacaoToSave.Nome_TipoAcomodacao = it.Nome_TipoAcomodacao;

                    // Update current setor
                    _tipoAcomodacaoContext.TipoAcomodacaoItems.Add(tipoAcomodacaoToSave);

                    list.Add(tipoAcomodacaoToSave);
                }
                var tipoAcomodacaoInclusaoEvent = new TipoAcomodacaoInclusaoGrupoIntegrationEvent(list);

                await _tipoAcomodacaoIntegrationEventService.SaveEventAndTipoAcomodacaoContextChangesAsync(tipoAcomodacaoInclusaoEvent);

                await _tipoAcomodacaoIntegrationEventService.PublishThroughEventBusAsync(tipoAcomodacaoInclusaoEvent);

                //Processado evento EMPRESA
                await _tipoAcomodacaoIntegrationEventService.ProcessedThroughEventBusAsync(@event);
            }
        }
Ejemplo n.º 2
0
        public async Task <IActionResult> SalvarTipoAcomodacao([FromBody] TipoAcomodacaoItem tipoAcomodacaoToSave)
        {
            //AREA DE VALIDACAO
            string msgRule = "";

            if (!ruleValidaNomeTipoAcomodacao(tipoAcomodacaoToSave.Nome_TipoAcomodacao, ref msgRule))
            {
                return(BadRequest(msgRule));
            }

            if (!ruleValidaCodExternoTipoAcomodacao(tipoAcomodacaoToSave.CodExterno_TipoAcomodacao, ref msgRule))
            {
                return(BadRequest(msgRule));
            }

            //FIM AREA DE VALIDACAO

            if (_administrativoContext.Set <TipoAcomodacaoItem>().Any(e => e.Id_Empresa == tipoAcomodacaoToSave.Id_Empresa && e.Id_TipoAcomodacao == tipoAcomodacaoToSave.Id_TipoAcomodacao))
            {
                _administrativoContext.TipoAcomodacaoItems.Update(tipoAcomodacaoToSave);
            }
            else
            {
                _administrativoContext.TipoAcomodacaoItems.Add(tipoAcomodacaoToSave);
            }

            //Create Integration Event to be published through the Event Bus
            var tipoAcomodacaoSaveEvent = new TipoAcomodacaoSaveIE(tipoAcomodacaoToSave.Id_Empresa, tipoAcomodacaoToSave.Id_TipoAcomodacao, tipoAcomodacaoToSave.Nome_TipoAcomodacao, tipoAcomodacaoToSave.CodExterno_TipoAcomodacao, tipoAcomodacaoToSave.Id_CaracteristicaAcomodacao);

            try
            {
                // Achieving atomicity between original Catalog database operation and the IntegrationEventLog thanks to a local transaction
                await _administrativoIntegrationEventService.SaveEventAndTipoAcomodacaoContextChangesAsync(tipoAcomodacaoSaveEvent);
            }
            catch (Exception e)
            {
                //Validações das CONSTRAINTS do BANCO
                if (ruleValidaNomeTipoAcomodacaoUnique(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 _administrativoIntegrationEventService.PublishThroughEventBusAsync(tipoAcomodacaoSaveEvent);


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