Inventory (vlab for http://globo.com/)
Um pequeno projeto para testar minhas habilidades.
...
Construir um sistema CRUD (create, read, update, delete) da maneira que se sentir mais confortável, apenas seguindo os seguintes pré-requisitos:
- Banco de dados (preferencialmente NoSQL)
- As operações que manipulam dados devem ser autenticadas
- Testes do código (livre escolha)
- Deploy em um PAAS, ou em algum outro serviço na nuvem
- O código deve ser publicado no Github
A análise do código é com foco na segurança, não se preocupe com UX!
...
Ter instalado localmente (apenas p/ Desenvolvimento e Teste):
$ git clone https://github.com/raulpereira/inventory.git
$ cd inventory
$ 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://inventory-rp.herokuapp.com/ 👏
Rails: Escolhido para continuar a estudar o potencial da plataforma e por acreditar que conseguiria finalizar o máximo das requisitos necessários para o desafio em menos tempo.
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 o cadastro de materiais, além disso somente ele tem acesso aos materiais cadastrados por ele na aplicação.
HTML + CSS (c/ Bootstrap) + JS (c/ CoffeeScript + jQuery): Não usei nenhuma plataforma para implementar esta camada, apenas bibliotecas facilitadoras.
RSpec: Toda a estrutura do modelo e controle foi coberta - backend, ficou pendente realizar os testes para os helpers e os cenários para as 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.
Continuo feliz com a produtividade desta plataforma, o maior tempo para construção desta solução foi dedicado à construção dos testes, o foco foi cobrir toda parte backend possível. Mas ficou pendente cobrir todos os cenários possíveis do frontend, o que é bastante importante para segurança e evolução da aplicação.
Além disso ficou faltando utilizar um banco de dados não relacional, porém, como este quesito não era obrigatório, a construção da aplicação foi feita de maneira que esta mudança seja menos problemática possível, apenas sendo necessário plugar este tipo de banco caso seja obrigatório.
Fica como melhoria desta solução, acabar de cobrir com teste o restante da aplicação e substituir o banco de produção por um NoSQL, a princípio será o MongoDB.
ADIANTE! 💪