public async Task <IActionResult> SalvarAcomodacao([FromBody] AcomodacaoItem acomodacaoToSave) { //AREA DE VALIDACAO string msgRule = ""; if (!ruleValidaCodExternoAcomodacao(acomodacaoToSave.CodExterno_Acomodacao, ref msgRule)) { return(BadRequest(msgRule)); } if (!ruleValidaNomeAcomodacao(acomodacaoToSave.Nome_Acomodacao, ref msgRule)) { return(BadRequest(msgRule)); } //FIM AREA DE VALIDACAO if (_administrativoContext.Set <AcomodacaoItem>().Any(e => e.Id_Acomodacao == acomodacaoToSave.Id_Acomodacao)) { _administrativoContext.AcomodacaoItems.Update(acomodacaoToSave); } else { _administrativoContext.AcomodacaoItems.Add(acomodacaoToSave); } //Create Integration Event to be published through the Event Bus var acomodacaoSaveEvent = new AcomodacaoSaveIE(acomodacaoToSave.Nome_Acomodacao, acomodacaoToSave.Id_TipoAcomodacao, acomodacaoToSave.Id_Empresa, acomodacaoToSave.Id_Setor, acomodacaoToSave.CodExterno_Acomodacao, acomodacaoToSave.Cod_Isolamento); try { // Achieving atomicity between original Catalog database operation and the IntegrationEventLog thanks to a local transaction await _administrativoIntegrationEventService.SaveEventAndAcomodacaoContextChangesAsync(acomodacaoSaveEvent, acomodacaoToSave); } catch (Exception e) { //Validações das CONSTRAINTS do BANCO if (ruleValidaNomeAcomodacaoUnique(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(acomodacaoSaveEvent); return(CreatedAtAction(nameof(SalvarAcomodacao), acomodacaoToSave.Id_Acomodacao)); }
public async Task <IActionResult> IsolarAcomodacao(int idAcomodacao, Isolar isolar) { string msgRule = ""; var acomodacaoToSave = _administrativoContext.AcomodacaoItems .OfType <AcomodacaoItem>() .SingleOrDefault(e => e.Id_Acomodacao == idAcomodacao); if (acomodacaoToSave == null) { string msgStatus = _localizer["VALIDA_EXISTENCIAACOMODACAO"]; return(BadRequest(msgStatus)); } acomodacaoToSave.Cod_Isolamento = isolar.ToString(); _administrativoContext.AcomodacaoItems.Update(acomodacaoToSave); //Create Integration Event to be published through the Event Bus //Create Integration Event to be published through the Event Bus var acomodacaoSaveEvent = new AcomodacaoSaveIE(acomodacaoToSave.Nome_Acomodacao, acomodacaoToSave.Id_TipoAcomodacao, acomodacaoToSave.Id_Empresa, acomodacaoToSave.Id_Setor, acomodacaoToSave.CodExterno_Acomodacao, acomodacaoToSave.Cod_Isolamento); try { // Achieving atomicity between original Catalog database operation and the IntegrationEventLog thanks to a local transaction await _administrativoIntegrationEventService.SaveEventAndAcomodacaoContextChangesAsync(acomodacaoSaveEvent, acomodacaoToSave); } catch (Exception e) { return(BadRequest(e.Message)); } // Publish through the Event Bus and mark the saved event as published await _administrativoIntegrationEventService.PublishThroughEventBusAsync(acomodacaoSaveEvent); return(CreatedAtAction(nameof(IsolarAcomodacao), "OK")); }