Descrição breve sobre a api.
Essa é uma API Serverless construída com Typescript utilizando NodeJS como principal tecnologia e postgresSQL como banco de dados.
Nós utilizamos Eslint, Prettier, editorconfig e um StyleGuide integrations com formatação automática. Por favor, baixe essas extensões no seu editor de código.
Para ter certeza que o Prettier formata ao salvar. Adicione
"editor.formatOnSave": true
nas configurações pessoais do seu VSCode.
Antes de começar, você vai precisar ter instalado em sua máquina as seguintes ferramentas:
→ Git;
→ Node.js;
→ Docker;
# Clone este repositório
$ git clone
# Vá para a pasta da aplicação Mobile
$ cd godiet-api
# Instale as dependências
yarn install
Após a instalaçao das dependências, é necessário criar um container docker. Você pode rodar o container em qualquer porta e configurar no arquivo de variáveis de ambiente.
Caso queira utilizar o script para criação de container, basta rodar o comando abaixo:
# Iniciando container docker
$ docker-compose up -d database
Por padrão, o container vai ser criado na porta 5435:5432
, mas você pode ficar livre para alterar a porta do container. Lembrando de alterar também o DATABASE_URL
do arquivo .env
.
Depois disso, adicione na pasta raíz um arquivo .env
, de acordo com o env.example
deste repositório.
Você pode obter mais exemplos de configuração da variável de ambiente para o prisma no link abaixo.
Após inicializar o container docker e configurar as variáveis de ambiente, é necessário rodar as migrations para atualizar a imagem postgres criada, e popular o banco de dados com as informações necessárias.
Para isso, utilize os comandos criados no package.json
.
# Crie todas as migrations
$ yarn migrations:dev
# Popule o banco de dados
$ yarn seed:dev
Logo após, sua aplicação já esta pronta para ser inicializada.
# Inicie a aplicação
$ yarn dev
Explicar como executar os testes automatizados para este sistema.
Explique que eles verificam esses testes e porquê.
# run tests with coverage
$ yarn test
# run tests and open vitest ui
$ yarn run test:ui
Por padrão, o container do ambiente de testes vai ser criado na porta definida no env
. Através da propriedade DATABASE_TEST_URL
.
# run tests integration
$ yarn test:int
# run tests and open vitest ui
$ yarn test:int --ui
Ao utilizar o script acima, deve-se criar um container docker na porta que foi definida na variável DATABASE_TEST_URL
, atualizar o banco com as migrations e rodar os testes de integração
Os testes de integração devem ser criados na pasta tests
, localizada dentro /src
.
O teste de integração deve ser criado com o intuito de verificar o retorno do handler, e se ta conforme esperado caso o usuário passe todos os parametros corretamente.
As verificações de tipo e se as respostas que devemos encaminhar caso o body
não esteja com todas as propriedades corretas deve ser testado dentro dos testes unitários do controller
O teste vai ser rodado na ci
, e ao final, o container é deletado, removendo todas as migrations e atualizações feitas nos testes. Porém, também podemos rodar os individualmente ou fora da pipeline
.
E por isso, deve-se adicionar no setup
dos testes para deletar as entidades a cada suit de teste. O vitest
já esta configurado para implementar este setup, basta acessar o arquivo reset-db.ts
e adicionar a função deleteMany
para a entidade que foi adicionada na aplicação. Como no exemplo abaixo:
export default async () => {
await prisma.$transaction([prisma.user.deleteMany()]);
};
Podemos realizar o deploy em dois stages.
# Deploy stage dev
$ yarn deploy:dev
# Deploy stage prod
$ yarn deploy:prod
Antes de realizar o deploy, deve-se configurar as variáveis de ambiente utilizando o arquivo .env
. Siga como exemplo o .env.example
, e crie um arquivo para cada stage do deploy. Assim como o exemplo abaixo:
# Environment stage dev
(.env.dev)
AUTH_SECRET='SECRET_DEV'
# Environment stage prod
(.env.prod)
AUTH_SECRET='SECRET_PROD'
After deploying, you should see output similar to:
Deploying aws-node-http-api-project to stage dev (us-east-1)
✔ Service deployed to stack aws-node-http-api-project-dev (152s)
endpoint: GET - https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/
functions:
hello: aws-node-http-api-project-dev-hello (1.9 kB)
Note: In current form, after deployment, your API is public and can be invoked by anyone. For production deployments, you might want to configure an authorizer. For details on how to do that, refer to http event docs.
Dar permissão para o script
chmod +x scripts/run-integration.sh