Shopanalyzer (vlab for http://nexaas.com/)
Um pequeno projeto para testar minhas habilidades.
...
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.
...
Ter instalado localmente (apenas p/ Desenvolvimento e Teste):
$ git clone https://github.com/raulpereira/shopanalyzer.git
$ cd shopanalyzer
$ bundle install --without production
$ bin/rails db:environment:set RAILS_ENV=development
$ rake db:migrate RAILS_ENV=development
$ rails s
$ bin/rails db:environment:set RAILS_ENV=test
$ rake db:migrate RAILS_ENV=test
$ rspec .
Acesse => https://shopanalyzer-rp.herokuapp.com/ 👏
Rails: Foi uma escolha determinada pelo desafio, decidi encarar pois essa plataforma faz parte dos meus estudos atuais.
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.
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.
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.
HTML + CSS (c/ Bootstrap) + JS (c/ CoffeeScript + jQuery): Não usei nenhuma plataforma para implementar esta camada, apenas bibliotecas facilitadoras.
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.
Heroku (PAAS): Escolhido por ter suporte grátis para aplicações Rails, além de ter uma boa integração com o GitHub.
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! 💪