- Para rodar a API
- Banco de dados
- Docker e Hospedagem
- Autenticação e Permissionamento
- Ferramentas da API
- Explicando algumas pastas
- Testes
- API em Nest com autenticação e sistema multi tenancy
- Docker com serviços do Postgresql, Redis e MongoDB
- Serviço do LMStudio para leitura dos dados do PDF
- API em FastAPI com a biblioteca Docling
- Simplificar permissionamento
- Serviço para salvar resultados do prompt no Redis
- Serviço para salvar conteúdo do PDF no MongoDB
- Serviço da API python no Docker Compose
- Configuração de testes e2e
O Docker inicia o banco de dados Postgresql, o banco Redis para cache e para as filas e o banco MongoDB.
Para iniciar o docker, basta executar o seguinte comando:
docker compose up
Toda o esquema do banco é gerado através do Prisma, para gerar a migration e aplicar o esquema no banco, basta executar o seguinte comando:
Para desenvolvimento
npx prisma migrate dev
Para produção
npx prisma migrate deploy
Para visualizar, criar, deletar e editar os dados em uma interface gráfica amigável, basta executar o seguinte comando:
npx prisma studio
Nesse template o esquema do banco será bem simples, apenas para demonstrar como esquematizar o banco e como os dados são estruturados.
Primeiramente é necessário instalar as dependências do projeto, para isso va até a pasta "pdf-parser-api" e execute o seguinte comando:
Abra o ambiente virtual python, caso ele não exista:
python3 -m venv venv
Ative o ambiente virtual:
source venv/bin/activate
Instale as dependências do projeto:
pip install -r requirements.txt
Para rodar a API execute no terminal:
uvicorn main:app --reload
Caso deseje sair do ambiente virtual execute:
deactivate
Demais comandos se encontram no arquivo package.json
na parte "scripts".
se precisar utilize o comando sudo
Primeiramente é necessário instalar as dependências do projeto, para isso va até a pasta "nest-api" e execute o seguinte comando:
npm install
O Template foi criado utilizando a versão 22.14.0, ao tentar instalar as dependências com versões abaixo dessa pode ocorrer erros.
Após instalada as dependências, basta executar o seguinte comando:
npm run start:dev
Para buildar a aplicação, basta executar o seguinte comando:
npm run build
Demais comandos se encontram no arquivo package.json
na parte "scripts".
se precisar utilize o comando sudo
Para este projeto eu utilizei o LMStudio e rodei localmente o modelo "deepseek-r1-distill-llama-8b" utilizando também a própria função de criar uma API, permitindo assim que eu conseguisse enviar requisições para o modelo através do endpoint gerado pelo próprio LMStudio.
Para fazer isso basta baixar o LMStudio
Procurar o modelo mencionado e baixá-lo
Após isso basta iniciar o modelo, ir na sessão "Developer" e clicar em "Start Server" no canto superior esquerdo, ou apenas dar "ctrl + .".
Feito isso a URL da API irá aparecer no canto direito do aplicativo.
Você pode habilitar o "Verbose Logging" da aplicação e também configurar o modelo para receber mais ou menos tokens (se atentar as especificações da sua máquina)
Por ser uma aplicação multi-tenancy, nessa API é permitido a criação de cargos e módulos
Dessa forma cada organização é capaz de criar os cargos que desejar (além dos previamente cadastrados) e definir as permissões que cada cargo terá. Esse permissionamento pode ser customizado a nível de módulos ou entidades da aplicação, podendo definir se é possível "ler", "criar", "atualizar", "deletar", ou qualquer outra ação naquela determinada funcionalidade da aplicação.
Documentação automizada, basta seguir a lógica utilizada nos DTOs e nos controllers para poder tipar e validar os dados e visualizar corretamente eles no Swagger UI no navegador. Para ver a documentação basta acessar a rota /docs
app.useGlobalInterceptors(new PrismaErrorsInterceptor());
app.useGlobalPipes(new ValidationPipe());
O PrismaErrorsInterceptor
é um interceptor que captura os erros do Prisma e os transforma em erros mais amigáveis para o usuário.
O ValidationPipe
é um pipe que valida os dados que estão sendo enviados para a aplicação, ele utiliza os decorators de validação do class-validator. Sem ele toda a lógica de paginação e filtragem não irá funcionar corretamente.
Nessa pasta estão alguns arquivos utilizados em vários lugares da aplicação, principalmente dtos, entities e decorators
Foram criados decorators para validação de CPF e CNPJ, pode-se utilizar essas funções de exemplo para criar seus próprios decorators.
Nessa pasta está apenas um arquivo .helper que serve como tradução de alguns erros na aplicação.
Nessa pasta se encontra toda a lógica das filas e as filas criadas, isso inclui envio de email através do BullMQ e uma função para limpar os "verification_requests" que já foram utilizados ou que estão expirados.
Nessa template de API foram criados apenas alguns testes de integração (end to end ou e2e). Também foi criado um ambiente de testes que, quando executado, cria um schema do banco de dados (sub-banco vazio) para testar apenas aquele bloco de testes (bloco de testes = arquivo de teste), após finalizado os testes todos os schemas que não são o schema principal (public) são deletados.
Os testes se encontram na pasta da sua respectiva entidade/feature, no caso deste template se encontra na pasta "src/user", no arquivo "user.e2e-spac.ts".
Qualquer arquivo de teste, para que rode corretamente, precisa ter a terminação ".e2e-spec.ts".
Para rodar os testes basta executar o seguinte comando:
npm run test:e2e
Para rodar os testes em modo watch basta executar o seguinte comando:
npm run test:e2e:watch
Para abrir um tunnel para a aplicação e poder acessar a API de qualquer lugar com HTTPS, basta executar o seguinte comando:
cloudflared tunnel --url http://localhost:3000
** É necessário ter o cloudflared baixado na máquina **
** Lembre-se de substituir o 3000
pela porta que a aplicação está rodando. **