Skip to content

Código da talk com a galera do TechLive que mostra um pouquinho dos recursos do Apollo juntamente com o Mongo e Redis.

Notifications You must be signed in to change notification settings

cavalcantigor/techlive-hands-on

Repository files navigation

TechLive Hands-On - TypeScript, Apollo, MongoDB e Redis

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.

Estrutura da aplicação

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.

Como usar

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.

Configurações

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.

MongoDB

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.

Redis

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 hub e procurar pelas imagens e como executar. Não esqueça de externalizar a porta do container para que ele seja acessível externamente.

Desafios

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 decorator de 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).

Considerações finais

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

About

Código da talk com a galera do TechLive que mostra um pouquinho dos recursos do Apollo juntamente com o Mongo e Redis.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published