/// <summary>
        /// Método para validar os processos para alterar um pacote
        /// </summary>
        /// <param name="_command">Comando de alteração do pacote</param>
        /// <returns>Dados salvos ou erros gerados</returns>
        public ICommandResult Handle(AlterarPacoteCommand _command)
        {
            //1º - Validando se o command recebido é válido
            _command.Validar();

            //Caso seja inválido, recebemos quando são os valores incorretos identificados por ele
            if (_command.Invalid)
            {
                return(new GenericCommandResult(false, "Informe os dados corretamente", _command.Notifications));
            }

            //2º - Verificando se o pacote existe no sistema
            var _pacoteExistente = _repository.BuscarPacotePorId(_command.IdPacote);

            if (_pacoteExistente == null)
            {
                return(new GenericCommandResult(false, "Pacote não encontrado, verifique o código do pacote", _command.Notifications));
            }

            //3º - Verificando se o novo titulo não está repetido com os armazenados na base de dados
            if (_command.Titulo != _pacoteExistente.Titulo)
            {
                //Buscando o email no banco de dados
                var _novoTituloExistente = _repository.BuscarPacotePorTitulo(_command.Titulo);

                //Verificando se há usuários utilizando o novo email informado
                if (_novoTituloExistente != null)
                {
                    return(new GenericCommandResult(false, "Este título já está vinculado a uma pacote, informe outro titulo", _command.Notifications));
                }
            }

            //4º - Atribuir ao objeto pacote a alteração dos dados do mesmo
            _pacoteExistente.AlterarPacote(_command.Titulo, _command.Descricao);

            //5º - Verificando se as alterações não contém erros para salvarmos
            if (_pacoteExistente.Invalid)
            {
                return(new GenericCommandResult(false, "Dados do pacote inválido", _command.Notifications));
            }

            //6º - Salvamos as alterações no banco de dados
            _repository.AlterarPacote(_pacoteExistente);

            //Caso não haja erros, restornamos sucesso e o novo objeto
            return(new GenericCommandResult(true, "Pacote alterado", _pacoteExistente));
        }
예제 #2
0
        /// <summary>
        /// Método para validar os processos para criar um pacote
        /// </summary>
        /// <param name="_command">Comando de criação do pacote</param>
        /// <returns>Dados salvos ou erros gerados</returns>
        public ICommandResult Handle(CriarPacoteCommand _command)
        {
            //1º - Verificando se a requisição não está inserindo um arquivo
            if (_command.Arquivo != null)
            {
                //Caso um arquivo esteja sendo anexado, enviamos para o método de 'UploadFile'
                var _imagemArquivo = UploadFile.Local(_command.Arquivo, "Pacotes");

                //Atribuindo o caminho de exibição da imagem para o objeto
                _command.Imagem = _imagemArquivo;
            }

            //2º - Validando se o command recebido é válido
            _command.Validar();

            //Caso seja inválido, recebemos quando são os valores incorretos identificados por ele
            if (_command.Invalid)
            {
                return(new GenericCommandResult(false, "Informe os dados corretamente", _command.Notifications));
            }

            //3º - Verificando se o titulo do pacote já não pertence a nossa base de dados
            var _pacoteExistente = _repository.BuscarPacotePorTitulo(_command.Titulo);

            //Caso o email exista, informe ao usuário que o email informado já está em uso
            if (_pacoteExistente != null)
            {
                return(new GenericCommandResult(false, "Titulo do pacote já cadastrado", _command.Notifications));
            }

            //4º - Criando uma nova instância do pacote com os dados informados
            var _pacote = new Pacote(_command.Titulo, _command.Descricao, _command.Imagem, _command.Ativo);

            //5º - Validando os dados inseridos do pacote
            if (_pacote.Invalid)
            {
                return(new GenericCommandResult(false, "Dados inválidos", _pacote.Notifications));
            }

            //6º - Salvando pacote na nossa base de dados
            _repository.AdicionarPacote(_pacote);

            //Caso não haja nenhum erro, retornamos a mensagem de sucesso
            return(new GenericCommandResult(true, "Pacote criado com sucesso", _pacote));
        }
        /// <summary>
        /// Método para validar os processos para buscar os pacotes
        /// </summary>
        /// <param name="_query">Query de busca de pacotes</param>
        /// <returns>Dados salvos ou erros gerados</returns>
        public IQueryResult Handle(BuscarPacoteQuery _query)
        {
            //1º - Validando se a query recebida é válida
            _query.Validar();

            //2º - Verificando se o parametro de busca não é por titulo
            if (_query.ParametroBuscaTitulo != null)
            {
                //Caso a query seja inválida, retornamos a mensagem de erro
                if (_query.Invalid)
                {
                    return(new GenericQueryResult(false, "Dados inválidos", _query.Notifications));
                }

                //3º - Verificando se o email de usuário não existe no banco de dados
                var _pacoteProcurado = _repository.BuscarPacotePorTitulo(_query.ParametroBuscaTitulo);

                //Caso o usuário não exista, retornamos a mensagem de erro
                if (_pacoteProcurado == null)
                {
                    return(new GenericQueryResult(false, "Pacote não encontrado, verifique que os dados informados", _query.ParametroBuscaTitulo));
                }

                //4º - Enviando a resposta da query para o nosso BuscarPacoteQuery para filtrar os dados do nosso pacote
                var _pacoteResultTitulo = new BuscarPacoteResult()
                {
                    Id                    = _pacoteProcurado.Id,
                    Titulo                = _pacoteProcurado.Titulo,
                    Descricao             = _pacoteProcurado.Descricao,
                    Imagem                = _pacoteProcurado.Imagem,
                    DataCriacao           = _pacoteProcurado.DataCriacao,
                    QuantidadeComentarios = _pacoteProcurado.Comentarios != null?_pacoteProcurado.Comentarios.Count() : 0,
                                                Comentarios = _pacoteProcurado.Comentarios != null?_pacoteProcurado.Comentarios.ToList() : null
                };

                //Retornando o objeto pacote filtrado
                return(new GenericQueryResult(true, "Dados do pacote", _pacoteResultTitulo));
            }

            //3º - Buscando na nossa base de dados o objeto usuário por meio do Id
            var _pacote = _repository.BuscarPacotePorId(_query.ParametroBuscaId);

            //Caso o usuário não exista, retornamos a mensagem de erro
            if (_pacote == null)
            {
                return(new GenericQueryResult(false, "Pacote não encontrado, verifique que os dados informados", _query.ParametroBuscaId));
            }

            //4º - Enviando a resposta da query para o nosso BuscarPacoteQuery para filtrar os dados do nosso pacote
            var _pacoteResult = new BuscarPacoteResult()
            {
                Id                    = _pacote.Id,
                Titulo                = _pacote.Titulo,
                Descricao             = _pacote.Descricao,
                Imagem                = _pacote.Imagem,
                DataCriacao           = _pacote.DataCriacao,
                QuantidadeComentarios = _pacote.Comentarios != null?_pacote.Comentarios.Count() : 0,
                                            Comentarios = _pacote.Comentarios != null?_pacote.Comentarios.ToList() : null
            };

            //Retornando o objeto pacote filtrado
            return(new GenericQueryResult(true, "Dados do pacote", _pacoteResult));
        }