Skip to content

raulpe7eira/shopanalyzer

 
 

Repository files navigation

Shopanalyzer (vlab for http://nexaas.com/)

Um pequeno projeto para testar minhas habilidades.

frontend-scshot

Desafio

...

Sua tarefa é criar uma interface web que aceite upload de arquivos, normalize os dados e armazene-os. A aplicação deve:

  • Aceitar o upload de arquivos text via formulário, com dados separados por TAB, testar o aplicativo usando o arquivo fornecido (data.txt). A primeira linha do arquivo tem o nome das colunas. Você pode assumir que as colunas estarão sempre nesta ordem, e que sempre haverá uma linha de cabeçalho.
  • Interpretar o arquivo recebido, normalizar os dados e salvar corretamente a informação em um banco de dados relacional.
  • Exibir todos os registros importados, bem como a receita bruta total dos registros contidos no arquivo enviado após o upload + parser.
  • Ser escrita obrigatoriamente em Ruby 2.1+ Rails 4 e SQLite Feito c/ Rails 5.0.2 😥
  • Ser simples de configurar e rodar a partir das instruções fornecidas, funcionando em ambiente compatível com Unix (Linux ou Mac OS X) para Ruby On Rails e Windows para .Net. Ela deve utilizar apenas linguagens e bibliotecas livres ou gratuitas.
  • Ter um teste de model e controller automatizado para a funcionalidade pedida.
  • Ter uma boa aparência e ser fácil de usar.

...

Solução

Instalação

Pré-requisitos

Ter instalado localmente (apenas p/ Desenvolvimento e Teste):

Instalando dependências

$ git clone https://github.com/raulpereira/shopanalyzer.git
$ cd shopanalyzer
$ bundle install --without production

Subir & Rodar

Ambiente de desenvolvimento

$ bin/rails db:environment:set RAILS_ENV=development
$ rake db:migrate RAILS_ENV=development
$ rails s

dsv-scshot

Ambiente de teste

$ bin/rails db:environment:set RAILS_ENV=test
$ rake db:migrate RAILS_ENV=test
$ rspec .

tst-scshot

Ambiente de produção

Acesse => https://shopanalyzer-rp.herokuapp.com/ 👏

Considerações

Plataforma

Rails: Foi uma escolha determinada pelo desafio, decidi encarar pois essa plataforma faz parte dos meus estudos atuais.

Backend

Web Server

Puma.io: É a escolha padrão da plataforma, na versão utilizada (5.0.2), além de ser indicado pelo local que será hospedado em produção.

Banco de dados

SQLite: Utilizado por já vir embarcado na plataforma e facilitar o desenvolvimento local.

PostgreSQL: Escolhido por ser indicado pelo local que será hospedado em produção.

Segurança

Devise: Foi utilizado esta biblioteca de módulos para solucionar questões de segurança aos serviços que a aplicação possui. Hoje a aplicação permite o cadastro de novos usuários e apenas o usuário autenticado pode acessar os seus registros cadastrados.

Frontend

HTML + CSS (c/ Bootstrap) + JS (c/ CoffeeScript + jQuery): Não usei nenhuma plataforma para implementar esta camada, apenas bibliotecas facilitadoras.

Testes

RSpec: Quase toda a estrutura do modelo e controle foi coberta - backend, ficou pendente também realizar os testes para os helpers e os cenários das features - frontend. A finalização de todos os testes é mais do que necessário para orquestrar todo processo de implantação em ambiente de produção com mais segurança.

Servidores de produção

Heroku (PAAS): Escolhido por ter suporte grátis para aplicações Rails, além de ter uma boa integração com o GitHub.

Conclusão

Mais um desafio usando Rails, fiquei feliz com o resultado final, a solução esta bem funcional, porém, precisava de um pouco mais de tempo para averiguar toda parte de segurança relacionada com a manipulação do arquivo enviado, tirando isso, também faltou efetuar alguns testes, principalmente os do frontend e, a falta mais grave, não ter feito a solução na versão informada, acabei fazendo na versão instalada no micro pessoal e não percebi que estava usando uma versão diferente até escrever a primeira versão desta documentação.

Enfim, entrou no backlog de melhorias para próxima versão, averiguar se a solução tem algum problema para rodar na versão solicitada, além dos itens citados anteriormente.

AVANTE! 💪

Releases

No releases published

Packages

No packages published

Languages

  • Ruby 72.8%
  • HTML 24.2%
  • CSS 1.6%
  • Other 1.4%