Este projeto foi criado por motivos acadêmicos mostrando um pouco o que aprendi estudando a arquitetura hexagonal
npm i
Obs: E necessario que o NodeJs já esteja instalado em sua máquina
npm run setup:up
npm run dev
# verificar a url http://localhost:3000 ou http://localhost:${customPort}
docker-compose up -d
Obs: Deixei uma aquivo de DockerCompose para que a utilização deste projeto seja mais simples
npm run cli
# lista jobs configurados
npm run cli -- contact-create
# executa job configurado
Como sempre gosto de deixar meus projetos sempre da melhor forma possivel.
Decidir implementar trandução e feedback de erros. todos os arquivos de configuração de tradução estão
localizados em ./src/interface/http/middleware/i18n/**
deixei 2º(duas) posibilidades pre configuradas "en-US" e "pt-BR" para alterar a linguagem de retorno da api basta informa por
- header (accept-language)
- queryParams (lang)
Deixei configurado o socket para que sejá possivel trabalhar com feedbacks instantâneos aos clientes
arquivos de consumo estão localizados em ./src/interface/socket/**
e para produção basta olhar um exemplo que deixei
no arquivo ./src/infrastructure/repository/contact.ts
E sempre bom estar preparado para tudo como a ideia de programação assíncrona salva agente muitos gargalos de processamento
deixei configurado o comsumo de produção de queue com amqp arquivos de consumo estão localizados em
./src/interface/amqp/**
Como bom devopeiro gosto de colocar metricas de consumo em meus trabalhos gosto de verificar como minhas api´s se comportam em
ambiente de produção neste projeto decidir optar pela ferramenta prometheus.
arquivos de configuração estão localizados em ./src/interface/http/middleware/metrics/**
. caso queria verificar as metricas basta
acessar a url
Claro que uma api digina precisa de cache como vou economizar custos sem isso... para isso decidi utilizar redis
o arquivo de configuração estão localizado em ./src/interface/http/middleware/cache.ts
por padrão cache será de 5m.
caso de uso esta localizado em ./src/interface/http/controller/v1/contact.ts
Uma outra boa forma de economizar recursos e implatando limites de requisição por usuário. por padrão deixei um limite de janela de 5m e maximo de requisiçoes seja 1000. O arquivo de configuração estão localizado em ./src/interface/http/middleware/limteRate.ts
Bem se loggers e debbuger são ferramentas que utilizamos para achamos os problemas... então de desenvolvimento criar os problemas ? Para esse caso de logger decidi utilizar minha propria lib @ismaelalves/logger nela eu disponho integrações com express e axios acho que uma das principais diferença que fiz foi que por padrão eu já omito algumas informações sigilosas como 'passwords', 'secrets', 'authorization', 'apiKey' etc... alem de prover um idenficador unico que pode ser utilizado para verificar todos os passo de saida e entrada da aplicação.
Acho um ponto muito importante os desenvolvedores se atentarem a possiveis vulnerabilidades de sua aplicação para isso me utilizei de algumas libs
Tambem que deixei pre-configurado gerenciadores de credencias como vault que dará up de segurança em suas credencias.
Deixei configurado um Dockerfile ja pronto para realizar o build do projeto. tambem deixei um docker-security pra realizar testes de segurança no script de build do dockerfile com a ferramenta conftest.
npm run conftest
Deixei configurado o helm para que sejá possivel trabalhar com kubernetes.
os respectivos arquivos estão localizados em ./scripts/helm/**
O projeto possui uma documentação das rotas da API basta navegar para url.
Desenvolvido por: Ismael Alves 🤓🤓🤓
- Email: cearaismael1997@gmail.com
- Github: github.com/ismaelalvesgit
- Linkedin: linkedin.com/in/ismael-alves-6945531a0/
Verifique Configurações e Referencias.