Essa é a API que fornece os dados necessários para o Frontend, escrita em TypeScript com NestJS.
Execute antes de tudo o seguinte comando:
npm i typeorm nodemon -g
Se não possuir o Docker e o Docker Compose instalado, instale na máquina antes para conseguir usar o banco MySQL localmente.
Após instalar, execute docker-compose up -d
para iniciar o banco de dados.
Use o seguinte comando para criar o arquivo de configurações a partir do exemplo:
cp .env.mysql.example .env
E depois, inicie o container
que contém os serviços do MySQL usando:
docker-compose up -d mysql
Pronto! Agora, você pode criar uma migration
usando npm run add-migration v1
, e depois executa-la com npm run migration
para iniciar o banco de dados.
Se for usar SQLite em vez de MySQL, instale as dependências necessárias com:
sudo apt-get install sqlite3 libsqlite3-dev
E depois inicie uma banco de dados inicial com:
sqlite3 example.db "VACUUM;"
Por fim, crie o arquivo contendo as configurações iniciais:
cp .env.sqlite.example .env
Pronto! Agora, você pode criar uma migration
usando npm run add-migration v1
, e depois executa-la com npm run migration
para iniciar o banco de dados.
Para criar uma migration
, use o comando:
npm run add-migration NOME_DA_MIGRATION
E para executar todas as suas migrations
, use:
npm run migration
Caso queira realizar alguma operação mais complexa com o Typeorm, use o comando:
npm run typeorm:cli COMANDO
Esse é o nome biblioteca que lida com o banco de dados, a estrutura desse cara é a seguinte:
src/typeorm/migrations
: O local onde todas as migrations ficam.src/typeorm/entities
: O local onde todas as entidades criadas devem ficar, SEMPRE devem possuir o final terminando em.entity.ts
.
Sempre, ao criar uma nova entidade, crie uma pasta em src
com o nome da entidade ( Ex: src/products
).
Dentro da pasta, deve possuir a seguinte estrutura:
products
products.module.ts
controllers
( Todos os controllers relacionados ao produto )products.controller.ts
services
( Todos os serviços relacionados ao produto )products.service.ts
models
( Proxys, payloads e interfaces relacionados ao produto )products-create.payload.ts
products-update.payload.ts
Há quatro formas de autenticação na aplicação:
- Local
- Facens
Todas essas formas de autenticação vem ativas por padrão mas caso queira desativar alguma, basta ir no app.module.ts
e remove os modulos:
GoogleModule
- Para remover a autenticação com o GoogleFacebookModule
- Para remover a autenticação com o FacebookFacensModule
- Para remover a autenticação com a Facens
Todos os testes E2E, que são os mais comuns e que devem ser escritos, estão na pasta test
.
Para testar, foi adicionado um modulo em src/modules/test
que contém no controller
algumas rotas padrões que você pode acabar utilizando.
Com relação ao seed de usuários, em src/modules/test/controllers/test.controller.ts
, ele contém um método para realizar esse seed, edite esse método ou crie outros quando precisar seedar o banco de dados.
Na pasta test/utils
eu recomendo você colocar no primeiro funções que realizem vários passos repetitivos que podem ser utilizados em mais de um arquivo. Exemplo: autenticação de cada usuário que foi adicionado por uma seed.
E na pasta test/models
, eu recomendo você a adicionar todas as interfaces
, enums
, proxies
e payloads
criados só para os testes.
Procure onde você está importando a biblioteca, troque de:
- import helmet from 'helmet'
+ import * as helmet from 'helmet'
No meu navegador isso acontecia muito e abrir a aba anonima fazia voltar a funcionar. Isso ocorre também com o Ionic, Angular e outros.