DBServer - Challenge
Projeto desafio da DBServer. O projeto e suas versões estão hospedados na OVH em uma pequena VPS, apenas para visualizar a aplicação rodando.
VPS
- Modelo: Cloud RAM 2
- IP: 158.69.206.147
- VPS: vps228769.vps.ovh.ca
Aplicação / Versões
Foram desenvolvidas 4 versões independentes do projeto. Cada versão representa um modelo de aplicação e usa tecnologias que montam sua estrutura de acordo com a propósta da versão.
Como cada versão foi desenvolvida independente os pré-requisitos de cada uma é individual.
Todas aplicações tem "package.json" e também um arquivo em Bash que pode ser executado no terminal para instalar o aplicação. Todas aplicações também tem um gerenciador para manter o APP online, em uma foi usado o Forever e nas outras o PM2 apenas para exemplo.
Acesso
- Versão Simples: vps228769.vps.ovh.ca:8001
- Versão Clássica: vps228769.vps.ovh.ca:8002
- Versão Moderna: vps228769.vps.ovh.ca:8003
- Versão Avançada: vps228769.vps.ovh.ca:8004
- Versão Mobile: aguardando produção
Versão Simples
Versão Clássica
Versão Moderna
Versão Avançada
API
Instalação
$ npm install
ou
$ bash install.sh
Rodar aplicação
Execução direta.
$ nodejs app.js
Executar com gerenciador.
$ forever app.js
$ pm2 app.js
ou
$ bash start.sh
Caracteristicas das Aplicações
O projeto requer sempre duas camadas, uma de API para entrada de dados e outra de saída de dados que é interface de aplicativo.
Servidor: no diretório "_server" tem um exemplo de script para efetuar a instalação de todos softwares e ferramentas que auxiliaram o desenvolvimento do projeto.
1 - Versão - Simples
Esta versão usa o mínimo possível de tecnologia para seu funcionamento, somente o Node.JS server-side instalado já é o suficiente para seu completo funcionamento. Foi desenvolvida com intuito de ser usada como modelo para aplicações IoT (Internet das Coisas), e poderia ser aplicada em um micro dispositivo no painel do caminhão que efetua o transporte das bebidas.
Sugestão: outro modelo interessante para essa aplicação seria o desenvolvimento em Node-RED.
2 - Versão - Clássica
Esta versão usa as tecnologias clássicas da Web 2.0 e não tem pretenção de ser inovadora, mas ser apenas um exemplo de um possível legado ao qual o desenvolvedor teria que efetuar manutenção. Para gerenciar os pacotes e bibliotecas server-side foi utilizado o NPM, e como CDN de front-side foi utilizado o UnPKG para download de bibliotecas de interface.
OBS: caso internet cair ou ocorrer algum erro a aplicação não restaura automáticamente, este modelo de aplicação esta em desuso.
Tecnologias e Bibliotecas / Server-Side:
Tecnologias e Bibliotecas / Front-Side:
3 - Versão - Moderna
Esta versão usa tecnologias mais modernas tanto para a montagem da interface como para comunicação de dados como Socket, que cria uma conexão server-side e front-side, é um exemplo de aplicação moderna e atual. Para gerenciar os pacotes e bibliotecas server-side foi utilizado o NPM, e como CDN de front-side foi utilizado o CDN JS Cloud Flare para download de bibliotecas de interface, e para montagem do compilar o SASS foi usado o Gulp.
IMPORTANTE: caso internet cair ou qualquer erro ocorra, a aplicação se restaura automaticamente após retorno por ser uma conexão Socket, é um modelo de aplicação atual e com boa tecnologia.
Tecnologias e Bibliotecas / Server-Side:
Tecnologias e Bibliotecas / Front-Side:
Testes Automatizados
Os testes foram disponibilizazdos no diretório "test" e podem ser executados de forma individual ou todos simultaneamente.
$ mocha test/app.js
Executar testes no aplicativo.
$ mocha test/app.js
Executar testes na API.
$ mocha test/app.js
Executar testes geral.
$ bash test/execute.sh
Tecnologias e Bibliotecas / Testes:
Instalar bibliotecas.
$ bash test/install.sh
4 - Versão - Avançada
Esta versão é quase uma cópia a versão 3, no entanto ela faz uso maquina virtual com Docker e base de indexação com ElasticSearch, mesmo o projeto tendo especificado que não seria necessário o uso de base de armazenamento de dados acredito que seria interessante pelo menos um modelo de aplicação escalonável.
IMPORTANTE: máquinas com Docker podem ser facilmente replicadas e o ElasticSearch tem sido uma das melhores bases de indexação e também uma das mais escalonáveis do mercado.
Tecnologias e Bibliotecas / Server-Side:
Tecnologias e Bibliotecas / Front-Side:
Testes Automatizados
Os testes foram disponibilizazdos no diretório "test" e podem ser executados de forma individual ou todos simultaneamente.
$ mocha test/app.js
Executar testes no aplicativo.
$ mocha test/app.js
Executar testes na API.
$ mocha test/app.js
Executar testes geral.
$ bash test/execute.sh
Tecnologias e Bibliotecas / Testes:
Instalar bibliotecas.
$ bash test/install.sh
5 - Nova Versão ou Melhoria - Versão - Mobile
A próxima versão seria o desenvolvimento de um APP mobile usando o IONIC (que roda independente do dispositivo mobile) para que a empresa pudesse replicar de forma simples a todos transportadores o controle de refrigeração da mercadoria. Também poderia ser feito empacotamento da versão Web para uma versão Desktop usando o ELECTRON JS
Tecnologias e Bibliotecas:
Esta versão poderia ter suporte aos requisitos:
- Aviso (push) ao motorista no painel do caminhão.
- Histórico de transporte.
- Frota de caminhões.
- Painel administrativo para controle de frota.
- Tempo real controle de frota.
- Mapa e rotas para entregas.
- Sugestão da melhor rota de acordo com transito (comunicação com Waze).
Perguntas
Perguntas feitas ao Shane:
- Pergunta: Qual melhor forma de ver a temperatura dos freezers durante o transporte, painel do caminhão ou celular ?
Shane: O painel pode tirar a atenção, mas um aviso poderia ser interessante, o celular poderia também ser visto durante a entrega e não apenas durante o transporte.
- Pergunta: Você acredita que novos transportadores iriam acompanhar a temperatura dos freezers ?
Shane: Sim, é necessário para que a cerveja seja entregue da forma correta.
- Pergunta: Qual sua maior dificuldade nas entregas ?
Shane: As cervejas se não estiverem na temperatura correta alguns Pubs não aceitam a entrega, e as vezes tenho que aguardar o temperatura ficar correta para concluir a entrega.
- Pergunta: Como o aplicativo poderia ajudar nas entergas ?
Shane: Além do controle necessário da temperatura, o aplicativo também poderia sugerir melhor rota para efetuar as entregas.
- Pergunta: Você utiliza algum aplicativo de mapa ?
Shane: Sim, uso Waze para ver o status do trânsito em tempo real.
Conclusão
O projeto foi muito legal de ser desenvolvido, é um desafio que apesar de não requerer grande quantidade de código pode ser muito expandido e a codificação pode ser feita e inúmeras formas.