Giter Site home page Giter Site logo

challenge's Introduction

Desafio Fretadão

Instalação

Para a inicialização da aplicação é importante ter instalado o docker e o docker-compose no seu sistema.

Posteriormente, inclua as configurações necessárias no arquivo env, inserindo seu bitly token para permitir o encurtamento de url. Para saber como conseguir um token no bitly, acesse aqui.

Configurado todo o processo, para inicializar a aplicação, execute:

sudo docker-compose up

Após esse processo, ao instalar todos as gems necessárias e subir os containers do banco de da aplicação, ela será inicializada na porta 3000, podendo ser localmente acessada em http://localhost:3000/

Testes

Para executar os testes, entre dentro do container e execute:

rails test

Solução

Optei por utilizar o framework Ruby on Rails para o desenvolvimento do sistema com algumas gems que poderiam me auxiliar a atingir as metas propostas, não fazendo uso do desenvolvimento de uma api em Rails em conjunto com um front end desacoplado. As gems adicionais utilizadas para o desenvolvimento do sistema foram:

  • pg - banco de dados Postgresql em conjunto com a gem pg_search aprimorar a eficiencia no filtro dos perfis a partir das informações inseridas pelo usuário.
  • pg_search - gem para obter vantagens na pesquisa de buscas por ocorrências em alguma String, utilizando o método search_by_term, ele consegue fazer uma query com uma performance superior de um texto filtrando de forma generalizada, sem necessitar da especificação do atributo relacionado.
  • bitly - API para encurtamento de urls. Não houve uma justificativa de utilização além de ter sido citada nas instruções do desafio e de eu já ter utilizado o sistema web deles.

Tecnicas utilizadas

Não são muitas mas tentei me atentar em alguns pontos que poderiam ser interessantes.

  1. Aplicar boas práticas no desenvolvimento do sistema
  • Como não tinha muita experiência em relação a boas práticas mais específicas para desenvolvimento rails, tentei me guiar um pouco a partir deste handbook no desenvolvimento do desafio. Os pontos principais foram a ideia principal de respeitar a arquitetura MVC para que a View não interaja diretamente com a Model, apenas sob a supervisão da controller que gerencia esses processos, além da não utilização de variáveis instanciadas dentro da partials, apenas passadas como parâmetros através do locals.
  1. Reaproveitar código o máximo possível
  • provavelmente não cheguei a aplicar no sistema como um todo, só que tentei me preocupar em relação a repetição de código, se havia necessidade ou não de instanciar um objeto mais de uma vez, entre outros pontos. Em relação a realizar várias instancias de um objeto que talvez não havia necessidade eu posso referenciar a criação do client para a utilização da API do Bitly para o encurtamento das URLs. Para não criar um client toda vez em que eu registro um novo usuário, eu procurei implementar o padrão Singleton para manter apenas uma instância do client para ser reutilizada toda vez em que o usuário registre um novo perfil.
  • outro ponto foi uma utilização de partials para utilização em várias páginas do sistema, generalizando tanto a partial _search quanto a partial _form, passando todos as variáveis locais diretamente para as partials, aplicando uma das boas práticas citadas no ponto 1 das técnicas utilizadas.

Limitações

O sistema em si não possui muitas funcionalidades, porém tem alguns pontos importantes de se levantar a respeito sobre suas limitações:

  • A busca foi limitada a somente alguns campos do perfil: nome, username do github, organização e localização. Realizando a pesquisa de algum desses campos o sistema deve retornar os perfis relacionados.

  • Não tem uma aplicação direta de JavaScript no sistema, deixando ele bem cru com HTML e CSS.

  • Está faltando o desenvolvimento de alguns testes e a aplicação de algum sistema que consiga medir a cobertura de código da aplicação como um todo.

Pontos de Melhoria

O sistema no geral precisa de algumas melhorias, tanto na parte do front end na disposição dos componentes quanto no backend em relação a melhora do código em si, tratamento mais adequado de excessões e testes mais elaborados, procurando cobrir tanto os "caminhos felizes" quanto também os "caminhos tristes". Logo, para orientar melhor em alguns pontos de melhoria que poderiam ser aplicados, é importante:

  1. Muito código CSS poderia ser generalizado para ser melhor reutilizado, não havendo a necessidade de uma duplicação frequente no código, principalmente na questão de redimensionamento dos componentes.

  2. Provavelmente deve haver melhores maneiras de conseguir filtrar efetivamente as informações dos perfis na página do github, podendo haver uma melhora nesse quesito também.

  3. Tanto a validação dos campos da model de profile quanto o desenvolvimento do método de query poderiam ser mais robustos. No projeto, procurei fazer de uma maneira mais simples (principalmente na validação em regex das urls) para que conseguisse demandar mais tempo para outros pontos.

  4. Desenvolvimento de testes mais robusto, procurando cobrir tanto os caminhos felizes quanto os caminhos tristes. Além disso, tentei colocar a gem simplecov para medir a cobertura dos testes que eu cheguei a desenvolver mas não consegui configurar corretamente, e acabei deixando de lado para dar foco na finalização do desafio.

  5. Alguns commits não foram muito claros no que foi feito, principalmente no início do desenvolvimento, onde ficou um pouco confuso o que cada commit fazia e/ou se ele fazia apenas o especificado.

  6. Uso mesclado de tags html e métodos rails para um tipo de objeto, como para as imagens, por exemplo. Padronizar um tipo só ficaria mais agradável na leitura.

challenge's People

Contributors

guiaugusto avatar

Watchers

James Cloos avatar

challenge's Issues

Definir os testes a serem feitos

Descrição

É necessário definir os testes adicionais que devem ser feitos para cobrir todo código desenvolvido, com foco em testes unitários e de integração para testar as funcionalidades em conjunto do Backend.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.