Skip to content

raulpe7eira/inventory

Repository files navigation

Inventory (vlab for http://globo.com/)

Um pequeno projeto para testar minhas habilidades.

frontend-scshot

Desafio

...

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!

...

Solução

Instalação

Pré-requisitos

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

Instalando dependências

$ git clone https://github.com/raulpereira/inventory.git
$ cd inventory
$ 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://inventory-rp.herokuapp.com/ 👏

Considerações

Plataforma

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.

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 o cadastro de materiais, além disso somente ele tem acesso aos materiais cadastrados por ele na aplicação.

Frontend

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

Testes

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.

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

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! 💪