public async Task <OrcamentoUsuarioViewModel> Handle(AdicionarOrcamentoUsuarioCommand request, CancellationToken cancellationToken) { await _orcamentoAuthBaseApplication.VerificarPermissao(request.IdOrcamento, OrcamentoPermissaoEnum.ADMIN); var existeOrcamento = await _context.Orcamentos.AnyAsync(e => e.Id == request.IdOrcamento); if (!existeOrcamento) { throw new NotFoundException(nameof(Orcamento), request.IdOrcamento); } var existeUsuario = await _context.Usuarios.AnyAsync(e => e.Id == request.IdUsuario); if (!existeUsuario) { throw new NotFoundException("Usuário não encontrado"); } var existe = await _context.OrcamentoUsuarios.AnyAsync(e => e.IdOrcamento == request.IdOrcamento && e.IdUsuario == request.IdUsuario); if (existe) { throw new BusinessException("Usuário já adicionado ao orçamento"); } var permissoes = (request.Permissoes ?? new List <int>()).Distinct().ToList(); var permissoesInvalidas = permissoes.Except(OrcamentoPermissaoSeed.Seeds.Select(e => e.Id).ToList()).ToList(); if (permissoesInvalidas.Count() > 0) { throw new BusinessException(string.Format("Permissões ([{0}]) inválidas", string.Join(", ", permissoesInvalidas))); } var entidade = new OrcamentoUsuario(); try { _context.OrcamentoUsuarios.Add(entidade); var lista = MontarListaPermissoes(permissoes, entidade); _context.OrcamentoUsuarioPermissoes.AddRange(lista); await _context.SaveChangesAsync(); } catch (Exception ex) { throw new PersistenceException(ex); } return(_mapper.Map <OrcamentoUsuarioViewModel>(entidade)); }
private List <OrcamentoUsuarioPermissao> MontarListaPermissoes(List <int> permissoes, OrcamentoUsuario orcamentoUsuario) { List <OrcamentoUsuarioPermissao> lista = new List <OrcamentoUsuarioPermissao>(); if ((permissoes.Contains(OrcamentoPermissaoSeed.Editar.Id) || permissoes.Contains(OrcamentoPermissaoSeed.Excluir.Id)) && !permissoes.Contains(OrcamentoPermissaoSeed.Visualizar.Id)) { permissoes.Add(OrcamentoPermissaoSeed.Visualizar.Id); } OrcamentoPermissaoSeed.Seeds.ForEach(e => { lista.Add(new OrcamentoUsuarioPermissao() { IdPermissao = e.Id, OrcamentoUsuario = orcamentoUsuario, Permite = permissoes.Contains(e.Id) }); }); return(lista); }