Esse é o repositório com o código utilizando durante o hands-on da talk do dia 03/06 com a galera presente na live do TechLive.
O código fonte está em contigo src e os testes em __tests__. Os arquivos *.json na raíz do projeto são de configuração do JavaScript (package.json), TypeScript (tsconfig.json) e um "código de conduta" para escrita de código (tslint.json). O arquivo auxiliar jest.config.js faz a integração do jest com o TypeScript e torna a elaboração e execução de testes mais fácil.
Por fim, .nvmrc define a versão do NodeJS utilizada enquanto o Makefile disponibiliza uma série de comandos úteis.
Para instalar o conjunto de dependências, utilize:
make install
Lembrando que o NodeJS deve estar instalado na máquina. Recomendo o uso do nvm para isolar a instalação de diferentes versões do NodeJS.
Para rodar a bateria de testes, basta utilizar:
make test
e a cobertura de testes pode ser coletada executando
make coverage
Para verificar se o código está escrito conforme as regras definidas em tslint.json, utilize:
make lint
Para buildar a aplicação e gerar a pasta dist com o código fonte gerado, utilize:
make build
Por fim, para finalmente executar a aplicação, basta utilizar:
make start
A aplicação irá rodar na porta configurada padrão 127.0.0.0:5000 e o playground do Apollo GraphQL pode ser encontrado em 127.0.0.0:5000/graphql.
As configurações da aplicação estão em arquivos no formato .yaml dentro da pasta config. Cada arquivo é utilizado em um ambiente que é controlado pela variável de ambiente NODE_ENV que pode assumir os valores de: "sandbox", "test", "production" ou "development".
Mais configurações podem ser livremente criadas nos arquivos e acessadas via uma chamada a config.get(...).
Para setar uma determinada configuração via variável de ambiente, basta criar a variável correspondente em custom-environment-variables.
A aplicação utiliza uma instância MongoDB que esteja rodando localmente na porta 27017 e cria a collection graphql.
Para os testes, uma instância diferente deve estar rodando na porta 27018. Lembrando que ambas as configurações podem ser alteradas para o servidor de sua preferência nos arquivos de configuração.
Para visualizar as collections e documentos inseridos, basta utilizar o Mongo Express. É fácil de instalar e de usar.
A aplicação utiliza uma instância Redis que esteja rodando localmente na porta 6379.
Para os testes, a mesma instância é utilizada. As configurações também podem ser alteradas nos arquivos de configuração, inclusive podendo utilizar uma instância diferente para os testes.
PS: recomendo utilizar o Docker tanto para o MongoDB quanto Redis. Basta acessar o site
docker hube procurar pelas imagens e como executar. Não esqueça de externalizar a porta do container para que ele seja acessível externamente.
Alguns desafios perfeitamente possíveis de serem executados e adicionados ao projeto:
- Criar esquema de autenticação - pode ser bem simples com token estático (fácil);
- Criar um hook para logar quaisquer erros do GraphQL. Dica: ao instaciar o ApolloServer tem como ser criado o hook (fácil);
- Aumentar o schema com mais resolvers e types (médio);
- Criar
decoratorde cache para os métodos (médio); - Separar as responsabilidades dos resolvers e torná-los mais escaláveis (médio);
- Criar sua própria implementação de
datasource, tirando a lógica de cache do provider e deixando-o como responsabilidade apenas o acesso a dados (difícil).
Agradeço a oportunidade de abrir espaço para essa conversa e fiquei muito feliz com o feedback. Espero que apreciem o conteúdo e sintam-se a vontade para efetuar alterações e até mesmo melhorar esse projeto.
Qualquer dúvida, basta abrir uma issue ou, se preferir, pode me contatar.
https://cavalcantigor.github.io/
Links mostrados na apresentação
- https://github.com/luizalabs/teresa - Ferramenta que facilita o deploy de aplicações para clusters Kubernetes.
- https://github.com/luizalabs/lasier - Implementação aberta de uma biblioteca de
circuit breakpara python que funciona de maneira sícrona e assíncrona. - https://medium.com/luizalabs - Medium do LuizaLabs onde são publicados os mais diversos textos com os mais diversos temas.
- https://medium.com/luizalabs/evolu%C3%A7%C3%A3o-covid-19-no-brasil-f44a58453914 - Texto que fala sobre como o LuizaLabs tem usado dados para se preparar frente à pandemia de Covid-19.
- https://www.cabecadelab.com.br/ - Podcast do LuizaLabs.
- http://carreiras.magazineluiza.com.br/ - Portal com oportunidades de trabalho no Magazine Luiza (incluindo o LuizaLabs).
- https://www.apollographql.com/docs/apollo-server/ - Documentação do Apollo Server.
- https://www.digite.com/swiftkanban/ - Ferramenta utilizada pelos times do LuizaLabs para gerenciar as squads.