public async Task <CommandResponse> Handle(AtribuirPermissaoCommand request, CancellationToken cancellationToken)
        {
            var perfil = await this.BuscarPerfilComPermissoes(request.PerfilId, _perfilRepository);

            if (perfil == null)
            {
                await _mediator.Publish(new DomainNotification(request.GetType().Name, "Perfil não encontrado."));

                return(await Task.FromResult(CommandResponse.Fail));
            }

            foreach (var item in request.Atribuicoes)
            {
                if (item.Ativo)
                {
                    perfil = await _perfilService.AtribuirPermissaoAsync(perfil, item.PermissaoId);
                }
                else
                {
                    perfil = await _perfilService.RevogarPermissaoAsync(perfil, item.PermissaoId);
                }
            }

            if (await Commit())
            {
                await _mediator.Publish(new PermissaoAssinadaEvent(perfil));
            }

            return(await Task.FromResult(CommandResponse.Ok));
        }
예제 #2
0
        public async Task <CommandResponse> Handle(CriarPerfilCommand request, CancellationToken cancellationToken)
        {
            var perfil = this.DefinirPerfil(request);

            var perfilExistente = await _perfilRepository.Buscar(p => p.Identifacao.Nome == request.Nome && p.DeletadoEm == null);

            if (perfilExistente.Any())
            {
                await _mediator.Publish(new DomainNotification(request.GetType().Name, $"Um perfil com o nome {request.Nome} já existe."));

                return(await Task.FromResult(CommandResponse.Fail));
            }

            foreach (var item in request.Atribuicoes)
            {
                if (item.Ativo)
                {
                    perfil = await _perfilService.AtribuirPermissaoAsync(perfil, item.PermissaoId);
                }
                else
                {
                    perfil = await _perfilService.RevogarPermissaoAsync(perfil, item.PermissaoId);
                }
            }

            _perfilRepository.Adicionar(perfil);

            if (await Commit())
            {
                await _mediator.Publish(new PerfilCriadoEvent(perfil));
            }

            return(await Task.FromResult(CommandResponse.Ok));
        }