Skip to content

Commit 7fda67f

Browse files
committed
docs: documentando e descrevendo a API no READme
1 parent ff32071 commit 7fda67f

1 file changed

Lines changed: 247 additions & 54 deletions

File tree

README.md

Lines changed: 247 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,247 @@
1-
# Teste Técnico para Desenvolvedor - Processamento de Documentos
2-
3-
## Objetivo
4-
Criar uma API que processe documentos (PDF e páginas web), extraia dados, armazene em um banco de dados e associe esses documentos a clientes cadastrados.
5-
6-
## Requisitos Técnicos
7-
8-
### 1. Estrutura da API
9-
- Linguagem: Python EX: (FastAPI, Django REST Framework) ou Node.js EX: (Express/NestJS)
10-
- Banco de dados: PostgreSQL (ou outro banco relacional)
11-
- Processamento de PDF: QUalquer lib da preferencia
12-
- Web scraping: BeautifulSoup (Python)/ Cheerio (Node.js) ou outra ferramenta da preferencia
13-
14-
### 2. Funcionalidades
15-
16-
#### Cadastro de Clientes
17-
- CRUD completo para clientes
18-
- Campos mínimos: ID, Nome, Email, Data de Cadastro
19-
20-
#### Processamento de Documentos
21-
- Endpoint para upload de PDF
22-
- Endpoint para fornecer URL de página web
23-
- Extração de dados dos documentos (pelo menos: título, conteúdo, data de processamento)
24-
- Armazenamento dos documentos processados no banco de dados
25-
26-
#### Associação de Documentos
27-
- Cada documento processado deve ser associado a um cliente existente
28-
- Relação 1:N (um cliente pode ter vários documentos)
29-
30-
#### Consultas
31-
- Listar todos os clientes com contagem de documentos
32-
- Listar todos os documentos de um cliente específico
33-
- Buscar documentos por usuario retornando os campos
34-
35-
## Instruções para o Candidato
36-
37-
1. Crie um repositorio no github para esse desafio
38-
2. Implemente a API conforme os requisitos
39-
3. Adicione um arquivo README.md com:
40-
- Instruções para execução
41-
- Exemplos de requisições
42-
- Qualquer observação relevante
43-
4. Crie um Dockerfile para containerizar a aplicação
44-
5. Adicione testes unitários e de integração
45-
6. (Opcional) Adicione autenticação JWT para proteger os endpoints
46-
47-
## Critérios de Avaliação
48-
49-
1. **Funcionalidade**: Todos os endpoints funcionando corretamente
50-
2. **Qualidade de Código**: Organização, legibilidade, padrões de código
51-
3. **Tratamento de Erros**: Mensagens claras e tratamento adequado
52-
4. **Performance**: Processamento eficiente dos documentos
53-
5. **Documentação**: README claro e exemplos de uso
54-
6. **Testes**: Cobertura e qualidade dos testes
1+
# Backend Challenge - Processamento de Documentos
2+
3+
## 📌 Visão Geral
4+
5+
Este projeto é uma API desenvolvida para processar documentos (PDFs e páginas web), extrair dados, armazená-los em um banco de dados e associá-los a clientes cadastrados. A aplicação foi construída utilizando **NestJS** e segue boas práticas de desenvolvimento, como Design Pattern Singleton, SOLID, autenticação JWT, e integração com Docker.
6+
7+
### Funcionalidades Principais
8+
9+
- **Cadastro de Clientes**: CRUD completo para gerenciar clientes.
10+
- **Processamento de Documentos**:
11+
- Upload de PDFs e extração de título e conteúdo.
12+
- Processamento de páginas web via URL.
13+
- **Associação de Documentos**: Relacionamento 1:N entre clientes e documentos.
14+
- **Consultas**:
15+
- Listar clientes com contagem de documentos.
16+
- Listar documentos de um cliente específico.
17+
- Buscar documentos por cliente.
18+
- **Autenticação JWT**: Proteção de endpoints com autenticação baseada em tokens.
19+
- **Testes Automatizados**: Cobertura de testes unitários e de integração.
20+
21+
---
22+
23+
## 🔥 Stack Utilizada
24+
25+
- **Node.js**: Plataforma de execução JavaScript.
26+
- **NestJS**: Framework modular para construção de APIs escaláveis.
27+
- **PostgreSQL**: Banco de dados relacional.
28+
- **Prisma**: ORM para manipulação do banco de dados.
29+
- **JWT**: Autenticação baseada em tokens.
30+
- **Bcrypt**: Hash seguro de senhas.
31+
- **Cheerio**: Web scraping para extração de dados de páginas HTML.
32+
- **PDF-Parse**: Extração de dados de arquivos PDF.
33+
- **Docker**: Containerização para ambientes de desenvolvimento e produção.
34+
- **Jest**: Framework de testes unitários e de integração.
35+
36+
---
37+
38+
## 🚀 Tecnologias Utilizadas
39+
40+
- **Linguagem**: TypeScript
41+
- **Framework**: NestJS
42+
- **ORM**: Prisma
43+
- **Autenticação**: JWT e Bcrypt
44+
- **Validação de Dados**: Class Validator
45+
- **Testes**: Jest e Supertest
46+
- **Containerização**: Docker
47+
- **Web Scraping**: Cheerio
48+
- **Processamento de PDFs**: PDF-Parse
49+
50+
---
51+
52+
## 📂 Estrutura do Projeto
53+
54+
```plaintext
55+
/src
56+
|-- controllers/ # Controladores para gerenciar rotas
57+
|-- services/ # Lógica de negócios e integração com repositórios
58+
|-- repositories/ # Acesso ao banco de dados via Prisma
59+
|-- dtos/ # Data Transfer Objects para validação de dados
60+
|-- contracts/ # Interfaces e tipos compartilhados
61+
|-- errors/ # Classes de exceção personalizadas
62+
|-- config/ # Configurações da aplicação (ex.: banco de dados)
63+
|-- common/ # Pipes, guards e utilitários
64+
|-- main.ts # Arquivo principal da aplicação
65+
```
66+
67+
---
68+
69+
## 🛠️ Instalação do Projeto
70+
71+
### Pré-requisitos
72+
73+
- **Node.js**: Certifique-se de ter o Node.js instalado (v20.12 ou superior).
74+
- **Docker**: Instale o Docker e o Docker Compose para rodar os serviços.
75+
- **PostgreSQL**: Banco de dados utilizado pela aplicação.
76+
77+
### Passos para Instalação
78+
79+
### 1. Clone o repositório:
80+
81+
```bash
82+
git clone https://github.com/seu-usuario/backend-challenge.git
83+
```
84+
85+
### 2. **Instale as dependências**:
86+
87+
No diretório raiz do projeto, execute o seguinte comando para instalar todas as dependências necessárias:
88+
89+
```bash
90+
npm install
91+
```
92+
93+
### 3. **Inicie a aplicação**:
94+
95+
Execute o seguinte comando para iniciar a aplicação em modo de desenvolvimento:
96+
97+
```bash
98+
npm run start:dev
99+
```
100+
101+
## 🖥️ Como Rodar a API
102+
103+
### Ambiente de Desenvolvimento
104+
105+
#### 1. **Inicie os serviços do Docker:**
106+
107+
No diretório do projeto, execute o seguinte comando para subir os contêineres Docker que irão rodar o banco de dados e a aplicação:
108+
109+
```bash
110+
docker-compose up -d postgres
111+
```
112+
113+
#### 2. **Instale as dependências:**
114+
115+
No diretório raiz do projeto, execute o seguinte comando para instalar todas as dependências necessárias:
116+
117+
```bash
118+
npm install
119+
```
120+
121+
#### 3. **Execute as migrações do Prisma:**
122+
123+
Para configurar o banco de dados com as tabelas necessárias, execute as migrações do Prisma:
124+
125+
```bash
126+
npx prisma migrate dev
127+
```
128+
129+
#### 4. **Inicie a aplicação:**
130+
131+
Para iniciar a aplicação, use o seguinte comando:
132+
133+
```bash
134+
npm run start:dev
135+
```
136+
137+
#### 5. Acesse a API
138+
139+
Após iniciar a aplicação, ela estará disponível em:
140+
141+
```bash
142+
http://localhost:3000/
143+
```
144+
145+
### Ambiente de Produção
146+
147+
#### 1. **Inicie a aplicação pelo Docker-Compose:**
148+
149+
No diretório do projeto, execute o seguinte comando para subir os contêineres Docker que irão rodar o banco de dados e a aplicação:
150+
151+
```bash
152+
docker-compose up -d
153+
```
154+
155+
#### 2. Acesse a API
156+
157+
Após iniciar a aplicação, ela estará disponível em:
158+
159+
```bash
160+
http://localhost:3000/
161+
```
162+
163+
## 📚 Principais Rotas da API
164+
165+
### Autenticação
166+
167+
- **POST /auth/login**:
168+
- Autentica um usuário e retorna um token JWT.
169+
- **Body**:
170+
- `email`: E-mail do usuário.
171+
- `password`: Senha do usuário.
172+
- **Resposta**:
173+
- `token`: Token JWT gerado para autenticação.
174+
175+
### Clientes
176+
177+
- **POST /client**:
178+
179+
- Cria um novo cliente.
180+
- **Body**:
181+
- `name`: Nome do cliente.
182+
- `email`: E-mail do cliente.
183+
- `password`: Senha do cliente.
184+
- **Resposta**:
185+
- `client`: Cliente recém-criado.
186+
187+
- **GET /client**:
188+
189+
- Lista todos os clientes.
190+
- **Resposta**:
191+
- `clients`: Lista de todos os clientes registrados no sistema.
192+
193+
- **GET /client/document**:
194+
195+
- Lista todos os documentos associados ao cliente autenticado.
196+
- **Headers**:
197+
- `Authorization`: Token JWT válido.
198+
- **Resposta**:
199+
- `documents`: Lista de documentos pertencentes ao cliente autenticado.
200+
201+
- **GET /client/document/:id**:
202+
203+
- Retorna um documento específico do cliente autenticado.
204+
- **Parâmetros**:
205+
- `id`: ID do documento.
206+
- **Headers**:
207+
- `Authorization`: Token JWT válido.
208+
- **Resposta**:
209+
- `document`: Objeto do documento correspondente ao `id`, caso pertença ao cliente autenticado.
210+
211+
### Documentos
212+
213+
- **POST /document/pdf**:
214+
215+
- Faz upload de um PDF e processa o conteúdo.
216+
- **Body**:
217+
- `file`: Arquivo PDF.
218+
- **Resposta**:
219+
- `document`: Dados processados do PDF (como título, conteúdo extraído, data de processamento, etc.).
220+
221+
- **POST /document/web**:
222+
223+
- Processa uma página web a partir de uma URL.
224+
- **Body**:
225+
- `url`: URL da página web a ser processada.
226+
- **Resposta**:
227+
- `document`: Dados processados da página web.
228+
229+
## ⚙️ Testes
230+
231+
A aplicação conta com testes unitários e de integração utilizando o framework **Jest**.
232+
233+
### 🔹 Rodar Testes Unitários
234+
235+
Para executar os testes unitários da aplicação, utilize o seguinte comando:
236+
237+
```bash
238+
npm run test
239+
```
240+
241+
### 🔹 Rodar Testes de Integração
242+
243+
Para executar os testes de integração, utilize o seguinte comando:
244+
245+
```bash
246+
npm run test:int
247+
```

0 commit comments

Comments
 (0)