Repositório do código desenvolvido no Curso de TypeORM com TypeScript e PostgreSQL do professor Jorge Aluizio na Udemy
git clone https://github.com/bolatechproducoes/api-vendas.git .
Se você estiver utilizando o windows utilize o branch configurado para windows: https://github.com/bolatechproducoes/api-vendas/tree/windows
(se voce estiver rodando no WSL2 dentro de uma instalação Ubuntu 20.04lts utilize o branch master)
- Para rodar o projeto pelo docker-compose:
- Depois de clonar o projeto, executar no terminal na pasta do projeto o comando:
chmod +x .docker/entrypoint.sh
- Renomear o arquivo
.env.example.docker-compose
para.env
(Ele já esta configurado, é só alterar o nome que a aplicação irá funcionar). - Rodar no terminal na pasta do projeto o comando:
docker-compose up
para subir os containers e executar a aplicação. - A api estará rodando em http://localhost:3333 e as alterações que você fizer no código serão aplicadas no container, a pasta do projeto é o volume do node, para acessar o terminal do container do node utilize o comando:
docker-compose exec app bash
, trabalhe com o docker-compose rodando e as instalações e alterações de pacotes faça dentro do shell do node. - O PGadmin estará rodando em http://localhost:8000, com ele você pode acessar o banco de dados do Postgres, utilize o email '[email protected]' e a senha 'admin' para acessa-lo, clique no icone 'Add New Server', na aba 'General' preencha o campo 'name' com o nome 'Postgres', na aba 'Connection' preencha o 'Hostname/Adress' com o nome 'bd', preencha o campo 'Username' com o valor 'postgres', preencha o campo 'Maintenance database' com o valor 'apivendas' e preencha o campo 'Password' com o valor 'docker', marque a opção 'Save password' e clique no botão 'Save', agora você pode acessar os dados do banco de dados da api por aqui, o volume dos dados do banco de dados estará salvo no caminho:
.docker/dbdata
na pasta do seu projeto, ou seja, você pode destruir os containers do Docker que os dados continuarão salvos, você também pode acessar o shell do banco de dados executando o comandodocker-compose exec db bash
. - O openapi SWAGGER estará rodando em http://localhost:8001, aqui estará a documentação da api e você pode testar as rotas aqui, comece cadastrando um usuário para pode iniciar uma sessão e gerar o token de autenticação das outras rotas, lembre se de copiar o token e colar no botão de Authorization para liberar as rotas, o token é válido por 1 dia, o arquivo openapi.yaml esta no caminho:
.docker/doc/openapi.yaml
na pasta do projeto. - Para acessar o cache salvo pelo Redis você pode utilizar estas duas opções, você pode utilizar o comando:
docker-compose exec redis bash
para acessar o shell do container do Redis. - Você pode rodar os testes do Jest executando na pasta do projeto o comando:
npm run test
, (o docker-compose up deve estar rodando) depois você pode rodarnpm run test:coverage
e acessar o relatório de cobertura dos testes abrindo o arquivo/coverage/lcov-report/index.html
no seu navegador, para rodar os teste em watch mode você pode utilizar o script:npm run test:silent
e utilizar a opçãoo
para ficar executando os testes somente nos arquivos que sofrerem alteração e não foram commitados(caso receba mensagem de 'access error' na hora de executar os testes executenpm i
no terminal na pasta do projeto que resolverá).
- Para rodar a api no seu sistema sem utilizar o docker-compose:
- Executar o container do Postgres, configurar o bd apivendas e instalar a extensão do uuid no postgres.
- Executar o comando:
npm install
- Executar as migrações das tabelas com o comando
npm run -- -d src/shared/infra/typeorm/index.ts typeorm migration:run
executado no terminal na pasta do projeto. - Executar o container do Redis.
- Alterar o arquivo
.env.example
para:.env
. - Para funcionar voce precisa alterar a propriedade
host
de 'db' para 'localhost' no arquivo/src/shared/infra/typeorm/index.ts
. - Executar o comando:
npm run dev
- A api estará rodando em
http://localhost:3333
- Você pode testar a api utilizando o Swagger executando o arquivo openapi.yaml com a extensão: OpenApi(Swagger) do VsCode (ou no próprio Swagger) ou utilizar o Insomnia ou PostMan configurando as rotas e tokens. (Lembre-se de adicionar sua url de produção no arquivo openapi.yaml para poder testa-la em produção)
- Você pode criar uma build de produção com o babel utilizando o comando
npm run build
. O comando para executar a build de produção do projeto énode dist/shared/infra/http/server.js
, para funcionar voce precisa (antes de fazer a build) alterar a propriedadehost
de 'db' para 'localhost' no arquivo/src/shared/infra/typeorm/index.ts
.
-
Comando para executar o container postgres a primeira vez:
docker run --name postgres -e POSTGRES_PASSWORD=docker -p 5432:5432 -d postgres
-
Acessar o banco de dados com o usuario postgres e a senha docker e criar o banco de dados apivendas.
-
Rodar o comando de migrações do typeorm:
npm run typeorm -- -d src/shared/infra/typeorm/index.ts migration:run
-
Comando para iniciar o container quando reiniciar o pc:
docker start postgres
-
Comando para rodar o container PostgreSQL em produção:
docker run --name postgresql -e POSTGRESQL_USERNAME=your-user-name -e POSTGRESQL_PASSWORD=your-password -e POSTGRESQL_DATABASE=your-database-name -p 5432:5432 -d --restart=unless-stopped bitnami/postgresql:latest
(é uma boa prática alterar a porta padrão do bd em produção(-p outrovalor:5432))
Server para implementar cache de consultas no bd
-
Comando para instalar as dependencias do redis no projeto:
yarn add redis ioredis
-
Comando para instalar a tipagem dos pacotes:
yarn add -D @types/redis @types/ioredis
-
Comando para executar o container do redis a primeira vez:
docker run --name redis -p 6379:6379 -d -t redis:alpine
-
Comando para iniciar o container quando reiniciar o pc:
docker start redis
-
Comando para executar o container Redis em produção:
docker run --name redis -e REDIS_PASSWORD=your-password -p 6379:6379 -d --restart=unless-stopped bitnami/redis:latest
(é uma boa prática alterar a porta padrão do bd em produção(-p outrovalor:6379)) -
RedisInsight é um client para acessar os dados salvos no cache do Redis. (MUDOU BASTANTE E FOI SUBSTITUIDO NO CURSO)
-
Comando para executar o container do RedisInsight a primeira vez:
docker run --name redis-client -v redisinsight:/db -p 8001:8001 -d -t redislabs/redisinsight:latest
(MUDOU BASTANTE E FOI SUBSTITUIDO NO CURSO)
- Another Redis Desktop Manager: https://github.com/qishibo/AnotherRedisDesktopManager
-
Comandos para instalar no Ubuntu:
sudo snap connect another-redis-desktop-manager:ssh-keys
para liberar as chaves de permissão ao repositório e:sudo snap install another-redis-desktop-manager
para instalar a aplicação. -
Para instala no Windows abra o terminal como administrador e execute o comando
choco install another-redis-desktop-manager
(É necessário ter o instalador de pacote Chocolatey instalado para fazer a instalação).
- Utilizar o terminal para acessar o container:
-
Comando para acessar o terminal do container redis:
docker exec -it redis sh
-
Comando para acessar a CLI do Redis:
redis-cli
-
Comando para criar uma chave com valor:
set NOMEDACHAVE NOMEDOVALOR
-
Comando para acessar um registro:
get NOMEDACHAVE
-
Comando para deletar uma chave:
del NOMEDACHAVE
-
Comando para deletar varias chaves:
del [NOMEDEUMACHAVE NOMEDEOUTRACHAVE]
-
As definições dos campos das tabelas no TypeORM é feita através de entities.
-
As entities são utilizadas através de repositórios: import {getRepository} from typeorm'
-
O repositório permite utilizar os métodos como: findOne(), save(), update, etc...
-
Pode se criar um custom repository e criar métodos próprios.
-
Por padrão todos os campos são requeridos, colocar (isNullable: true,) nas configs para não ser.
-
Para poder utilizar o 'uuid_generate_v4()' no bd é necessário abrir o postegres no dbeaver, clicar com o botão da direita do mouse no bd que ira usar, escolher a opção criar-extensão e habilitar o uuid-ossp
-
Comando para criar uma migração com o TypeORM no TypeORM 2.x:
npm run typeorm migration:create -n NOMEDAMIGRAÇÂO
-
Comando para criar uma migração com o TypeORM no TypeORM 3.x:
npm run typeorm migration:create ENDERECODAMIGRACAO NOMEDATABELA
-
Comando para executar migração no TypeORM no TypeORM 2.x:
npm run typeorm migration:run
-
Comando para executar migração no TypeORM no TypeORM 3.x:
npm run -- -d ENDERECODOARQUIVODECONFIGDASMIGRACOES typeorm migration:run
-
Comando para desfazer uma migração:
npm run typeorm migration:revert
-
Comando para mostrar as migrações:
npm run typeorm migration:show
-
Comando para rodar as migrações no servidor de produção:
./node_modules/.bin/typeorm migration:run
- Não utiliza mais o arquivo ormconfig.json - configurar direto no arquivo de entrada
- É necessário importar todas as entidades e migrações
- Alterar o arquivo server.ts
- Nas migrações é necessário incluir o parametro --dataSource CAMINHODOARQUIVO (flag -d)
- Exemplo:
npm run typeorm -- -d src/shared/infra/typeorm/index.ts migration:run
- Para criar uma nova migração o comando é:
npm run typeorm migration:create ENDERECODAMIGRACAO NOMEDATABELA
exemplo:npm run typeorm migration:create src/shared/infra/typeorm/migrations/CreateMyNewTable
- A forma de escrever o arquivo de migração continua a mesma
- Os repositórios também precisam ser refatorados