Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Teste codificando um gateway de pagamento com a Pagar.me

NotificationsYou must be signed in to change notification settings

rubythonode/node-gateway-payment

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

71 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Este é o exemplo de código que eu,Jorge Feldmann, julgo o ideal para iniciar um projeto para aplicação Node.js. O código é baseado em refactoring de código para utilizar aAPI da Pagar.me

Desafio

A idéia é entender o que o código original (docs/codigo-original) faz para então consertar e refatorar o que achar necessário. Desde que o código atenda a funcionalidade inicial (que é extremamente básica), sinta-se livre para adicionar ou remover o que quiser dele. Note que este código contém desde pequenos erros até questões extremamente importantes que estão faltando. O objetivo final é entregar um projeto completo, seguro, pronto para produção e de fácil manutenção.

Não fique preso a apenas refatorar o código, altere o que achar necessário para deixar o projeto em um estado pronto para produção, então escolha querer evoluir o quanto quiser, mas cuidado apenas com over engineering.

Análise do desafio

Sobre over engineering: quando se trata de um teste com foco em produção, creio que a prioridade seja demonstrar o máximo de conhecimento, focando em conceitos como DRY, KISS, separação de contextos, modularização, legibilidade, para demonstrar tais recursos.

A solução aqui proposta é um exemplo de scafolding que engloba conceitos de segurança, performance, escalabilidade e agilidade no desenvolvimento de novos recursos, bem como uso de wrappers para componentes.t

O que foi alterado:

  • Rotas: para a listagem e criação, a rota é a mesma (/pokemons), mas com os verbos GET e PUT (idempotente) respectivamente. Para o processo de compra (/pokemons/buy) o recurso de compra (/buy) foi transformado num nível abaixo do recurso principal, ao contrário da original (/buy-pokemons);
  • Segurança: uso do middlewareHelmet;
  • Modularização das rotas (routes/routes.js) e dos recursos (/app/pokemons), ao invés de manter tudo isso atrelado;
  • Performance: conversão deconsole.log (que afunila o processamento) para um chaveamento de logs em arquivo para produção ou console.log em dev, componente Bunyan
  • Uso de steps e init() para mostrar o passo-a-passo das funções (leia o código de baixo para cima)
  • Uso doRevealing Pattern, com composição, para criação de objetos (return _public), mantendo o "new" para denotar instanciação de objetos
  • Uso doPM2: solução completa, open source e gratuita para monitoramento. Para DEV: recarregar alterações e acompanhamento de uso de recursos. Para PROD: uso de clusterização, recursos, API de healthcheck, escalonamento de instâncias, etc
  • Promisses: ótimas para legibilidade, mas têm que se tercuidado para tratativa de erros. Modifiquei os principais pontos em steps para legibilidade e melhor tratativa de erros
  • Config.js: certas constantes de configuração (porta da API, nome, api_key, url de serviços) foram transferidos para um arquivo config/config.js, afim de evitar "chumbar" tais dados dentro da aplicação
  • API Pagar.me: foi criado um wrapper (common/pagarme). A API_KEY está em config/config.js.
  • Dados de mock do pagamento: ainda estão dentro do recurso pokemon
  • Codificação literária: nomes de funções representam o que elas fazem. Ficam longas, mas evitam comentários
  • Assinatura de funções e métodos possuem o tipo esperado (intQuantity, objResponse), baseado nanotação de código húngara
  • Design patterns de Node.jselementares eavançados
  • Uso de features disponíveis doNode.js ES6
  • Uso de debug comnode-inspector
  • Performance sistêmica:guia Node.js para profiling
  • Performance de I/O HTTP: uso de stress test comsiege -b -c100 -t 60Shttp://localhost:3000
  • Testes de API baseados emtestes funcionais da StrongLoop
  • Integração contínua comTravis.CI
  • Organização de pastasbaseada em comportamentos
  • Uso doNPM como ferramental de build, perfis, etc
  • Transformação do modelo de dados baseado em Sequelize.js para um arquivo separado, baseado em componentes de model. Podemos usar Sequelize, Mongoose, Bookshelf, ou até mesmoJoi do Happi.js, apenas mudando o componente de factory de models
  • Autenticação: usariaJWT (JSON Web Tokens),Passport.js, com o Redis ou MemCache
  • IDE: Sublime, com templates, snippets e meugerador de código. Mas usaria um Web Storm com muita alegria ;)

Referências:

Instalação

Instalação do Node.js 6.0.0 e do NPM

  • Node.js versão 6.0.0
  • Instruções de instalaçãoneste link
  • Ao final, verificar a versão de ambos para confirmar:
node -vnpm -v
  • Recomenda-se o uso deNVM para versionar diferentes versões do Node.js

Dependências

  • Instalação global do componentePM2 1.x
npm install -g pm2pm2 -v

Instalação do projeto

git clone https://github.com/jotafeldmann/node-gateway-paymentcd node-gateway-payment/srcnpm install

Inicializando a aplicação

Acessar a pasta com o código:

cd node-gateway-payment/src

Iniciar a aplicação para PROD

Inicializa o PM2, com a aplicação como serviço, utilizando o máximo de núcleos disponíveis, observando mudanças e atualizando, reiniciando caso ocorram falhas

export NODE_ENV=productioncd node-gateway-payment/srcnpm start

Parar a aplicação

npm stop

Iniciar a aplicação para DEV

Inicializa o PM2, com a aplicação como serviço, utilizando 1 núcleo, observando mudanças, parando a cada falha e lançando o log após a inicialização

npm run dev

Logs da aplicação

npm run logs

Testes

Acessar a pasta com os testes:

cd node-gateway-payment/testes

Instalação dos testes e dependências

  • Instalação global do Mocha
npm install -g mochamocha --version
  • Instalação das dependências locais dos testes
cd funcionaisnpm install

Iniciar os testes

cd node-gateway-payment/srcnpmtest

Estudo do código

Após subir a aplicação, acessarhttp://localhost:3000 para verificar os recursos disponíveis.

Licença

MIT License © Jorge Feldmann (jotafeldmann)

About

Teste codificando um gateway de pagamento com a Pagar.me

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

[8]ページ先頭

©2009-2025 Movatter.jp