Este é um boilerplate baseado no projeto start-hapiness que utiliza Hapi.js e MongoDB, porém foi alterado para aplicar os frameworks Hapi.js e Sequelize(PostgreSQL).
Na raiz, temos os diretórios: scripts, data e src.
- scripts são responsáveis pelos scripts bash, tais como:
bootstrap,serveretest. - data é o diretório que contém os scripts que serão executados.
- fixtures são dados padrões para o ambiente de teste, desenvolvimento e até mesmo para ambiente de homologação, não sendo necessário cadastrar os dados quando o banco de dados é resetado. Podendo assim, simular um ambiente mais real.
- migrations são os scripts para criação do banco de dados, como por exemplo criar tabelas, alterar, deletar e etc.
- seeders são dados reais, que serão executados em todos os ambientes, inclusive no ambiente de produção.
- src é o diretório principal do código-fonte.
- core é o local onde fica todos os plugins e os arquivos importantes para o bootstrap do sistema.
- bin é o local onde fica a configuração responsável por rodar os scripts SQL que será executado com base nos seguintes ambientes:
test,development,sandboxeproduction. De acordo a necessidade, podem ser facilmente alterados. - plugins é o local onde ficam os plugins relacionados ao ecossistema Hapi, como auth e log etc.
- util é o local onde podemos encontrar algumas funções úteis para a API.
- bin é o local onde fica a configuração responsável por rodar os scripts SQL que será executado com base nos seguintes ambientes:
- models é o local onde é definido os modelos do SEQUELIZE.
- modules é o local onde encontram-se os arquivos das entidades que serão utilizadas na API.
- test é o local responsável por carregar todo o ambiente de teste.
- test-utils é o local onde encontram-se algumas funções úteis para os testes da API.
- core é o local onde fica todos os plugins e os arquivos importantes para o bootstrap do sistema.
- src
- modules
O diretório modules, é o local onde será criada as entidades da API, como por exemplo task.
- task
- admin
escopo- test
- task.admin.spec.js
- task.admin.controller.js
- task.admin.routes.js
- task.admin.validation.js
- test
- public
escopo- test
- task.public.spec.js
- task.public.controller.js
- task.public.routes.js
- task.public.validation.js
- test
- task.schema.js
- admin
Na maioria dos casos, precisamos de vários escopos de acesso em uma API. Na estrutura atual existem dois tipos de escopos, admin no qual somente o administrador terá acesso, e public, no qual não é necessário estar logado para enviar uma requisição. Dessa forma, estamos separando as responsabilidades entre os escopos, o que torna mais fácil a manutenção do mesmo.
É obrigatório seguir a estrutura descrita acima, {entidade}.{escopo}.{controller}.js
Você terá os arquivos: {entidade}.{escopo}.routes.js, {entidade}.{escopo}.validation.js e {entidade}.{escopo}.controller.js.
task.public.validation.jsneste arquivo é especificado as regras para cada endpoint com base no arquivotask.schema.js. . Podendo haver outras regras se necessário.task.public.controller.jsé o arquivo responsável pelas regras de negócios.task.public.routes.jsé o arquivo que contém as configurações de roteamento do Hapijs.
Geralmente o arquivo {entidade}.schema.js é comum entre os escopos, podendo ficar na raiz do modules de cada entidade.
task.schema.jsregras de validações comoheader,params,queryentre outras.
Para executar API é necessário configurar as variáveis de ambiente com base no exemplo .envsamble. Caso prefira, crie um arquivo .env e cole as informações do arquivo .envsample e ajuste de acordo com sua necessidade.
Após configurar, execute npm start. Lembrando que para usuários Windows é necessário executar o mesmo através de um terminal tipo Git BASH, acesse scripts e execute ./server.
Para rodar o teste, é necessário existir um banco de dados criado com a seguinte nomenclatura: BD_NAME que é o nome do banco configurado na variável de ambiente seguido por _test, e por fim, basta executar npm test.
Caso você utilize docker, execute docker-compose up -d acesse localhost:8080/documentation e tudo estará funcionando. Você ainda pode rodar com o docker o ambiente de teste docker-compose --file docker-compose-test.yml up você verá os testes sendo executados. Altere algum teste e automaticamente os testes serão executados novamente.
JWTAutenticação via token.SwaggerPara documentação da API.PaginaçãoPaginação da API.Dynamic FieldsOpção para informar quais campos serão retornados na API com base no header. DynamicCacheOpção para configurar cache em Redis, em alguns casos podemos armazenar em cache informações para otimizar nosso tempo de resposta. Slap
Licensed under MIT