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); } }
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)); }