Shortener (vlab for http://bemobi.com.br/)
Um pequeno projeto para testar minhas habilidades.
Ter instalado localmente (apenas p/ Desenvolvimento e Teste):
$ npm install
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.
$ sh scripts/dsv-server.sh
$ sh scripts/tst-server.sh
Acesse => https://shortener-rp.herokuapp.com/ 👏
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
.
Todo frontend precisa ser repensado
😥
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.
Express.js: Foi escolhido pela popularidade e pela vasta gama de material na web, facilitando a meta de cumprir com o prazo de entrega.
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.
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.
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.
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.
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! 💪