Skip to content

Laboratório de Validação de Conhecimento para Bemobi

License

Notifications You must be signed in to change notification settings

raulpe7eira/shortener

 
 

Repository files navigation

Shortener (vlab for http://bemobi.com.br/)

Um pequeno projeto para testar minhas habilidades.

frontend-scshot

Instalação

Pré-requisitos

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

Instalando dependências

$ npm install

Configurando os ambientes

A aplicação possui um arquivo de configuração para cada ambiente (Teste, Desenvolvimento e Produção), nele temos as seguintes variáveis que podem ser redefinidas. Veja um exemplo padrão:

// shortener/config/env/dsv.js

module.exports = {

	env: 'dsv',
	db: 'mongodb://192.168.99.100:32771/shortener-dsv',
	port: 3000,
	debug: true

};
Variável Descrição Valores
env Define o ambiente 'dsv', 'tst' , 'prd'
db URL de conexão com a base de dados string
port Número da porta do servidor number
debug Habilita o modo Debug boolean

Obs.: Vale ressaltar que em ambiente de produção, muitas das variáveis são configuradas no próprio servidor escolhido e por motivos de segurança, não deve constar tais informações em arquivos públicos.

Subir & Rodar

Ambiente de desenvolvimento

$ sh scripts/dsv-server.sh

dsv-scshot

Ambiente de teste

$ sh scripts/tst-server.sh

tst-scshot

Ambiente de produção

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

Fluxos

Criação de Alias

Foi criado um algoritmo de conversão de base 10 para base 58, onde eu sempre espero um inteiro e retorno uma string convertida, para garantir que o número será sempre único, a base possui uma tabela sequencial que toda vez que haja necessidade de criar um Alias não customizado, incrementamos a última sequência e com base nesse número é gerada a string que será o novo Alias.

Diagrama de sequência

Backend endpoints

POST W/O CUSTOM_ALIAS

POST W/ CUSTOM_ALIAS

POST W/ ERROR 001

POST W/ ERROR 003

POST W/ ERROR 004

GET W/0 ALIAS

GET W/ ALIAS

GET W/ ERROR 002

GET TOP TEN

Frontend navigation

Todo frontend precisa ser repensado 😥

Considerações

Plataforma

Node.js: Foi uma escolha pessoal, resolvi encarar o desafio com uma plataforma que não tenho experiência profissional, fora que facilitaria ter tanto no backend quanto no frontend, o uso da mesma linguagem em todas as camadas da aplicação.

Backend

Web Server

Express.js: Foi escolhido pela popularidade e pela vasta gama de material na web, facilitando a meta de cumprir com o prazo de entrega.

Banco de dados

MongoDB: Além de ser um banco de dados não relacional que dará conta do recado caso o volume de consultas seja grande, este também seria outra camada no desenvolvimento que utilizaria a mesma linguagem para desenvolvimento.

Frontend

HTML + CSS (c/ Bootstrap) + JS (c/ jQuery): Não utilizei nenhum framework para implementar essa camada da solução, apenas bibliotecas facilitadoras, pois o foco era maior na parte backend, o desejo era apenas apresentar uma interface simples que conseguisse executar boa parte dos endpoints.

Testes

Mocha + SuperTest: Essa dupla foi utilizada para testar todos os endpoints do backend. Porém ficou faltando realizar os teste para o frontend, além de um teste E2E, necessários para orquestrar todo processo de implantação em ambiente de produção.

Servidores de produção

Heroku (PAAS) + mLab (DAAS): Ambos foram escolhidos pela facilidade de uso e seus pacotes gratuitos. Além de serem facilmente integrados com o GitHub, que é responsável pelo versionamento do código.

Conclusão

Aprendi bastante em 3 dias de desenvolvimento, ainda existem várias melhorias que podem ser realizadas e possivelmente várias refatorações a serem feitas, a maior parte delas esta na parte cliente, talvez usando algum framework como Angular ou React, também configuraria algum serviço de integração continua como o Travis CI, para agilizar e tornar seguro o processo de deploy. Enfim, novas melhoras em outro fork, num futuro bem próximo... ;)

AVANTE MOÇADA! 💪

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 77.3%
  • HTML 16.1%
  • Shell 4.4%
  • CSS 2.2%