You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
## Resumo
Este PR melhora a experiência de navegação e filtragem das vagas,
tornando a página mais intuitiva, consistente e mais fácil de
compartilhar. Também inclui ajustes para manter o estado da interface
sincronizado com a URL e reforçar a cobertura de testes.
## O que foi alterado
- Melhoria no componente de filtros das vagas para oferecer uma
experiência de busca mais clara e amigável.
- Ajuste na forma como termos de busca e filtros são aplicados,
facilitando a combinação de critérios e a refinagem dos resultados.
- Sincronização do estado de filtros, arquivo selecionado e paginação
com os parâmetros da URL, permitindo compartilhar e restaurar a
visualização mais facilmente.
- Refinamento da tabela de vagas para refletir melhor os filtros ativos,
a página atual e o tamanho da paginação.
- Atualização e expansão dos testes unitários relacionados a filtros,
paginação e renderização da página de vagas.
- Inclusão/atualização de documentação relevante para refletir as
mudanças na experiência e no fluxo de uso da funcionalidade.
## Por que isso é importante
Essas alterações tornam a busca por vagas mais previsível, mais fácil de
usar e mais preparada para cenários com muitos resultados ou vários
filtros aplicados ao mesmo tempo.
## Pontos para revisão
- Comportamento entre o estado da interface e os parâmetros da URL.
- Lógica de filtros ao combinar busca, palavras-chave e seleção de
arquivo.
- Comportamento de paginação e tamanho de página em diferentes cenários.
## Testes
Foram atualizados os testes unitários da interface para cobrir os fluxos
principais de filtragem, paginação e renderização da página.
<img width="1753" height="960" alt="image"
src="https://github.com/user-attachments/assets/cabeaa22-ffa9-4063-a251-95bedb178de1"
/>
@@ -74,15 +74,88 @@ Objetivo de produto: fornecer uma base robusta para busca, filtragem e gestão d
74
74
75
75
- Node.js >= 22
76
76
- npm
77
-
- Docker e Docker Compose (opcional, recomendado para ambiente completo)
77
+
- Docker Desktop com Docker Compose
78
78
79
-
### Instalação
79
+
### Caminho recomendado: stack completa com Docker
80
+
81
+
Use este fluxo para subir Postgres, Valkey, scraper Go, backend e frontend com a mesma rede Docker.
82
+
83
+
1. Instale as dependências locais:
84
+
85
+
```bash
86
+
npm ci
87
+
```
88
+
89
+
2. Crie o `.env` da raiz a partir do exemplo versionado:
90
+
91
+
```bash
92
+
cp .env.example .env
93
+
```
94
+
95
+
No Windows PowerShell:
96
+
97
+
```powershell
98
+
Copy-Item .env.example .env
99
+
```
100
+
101
+
3. Crie a rede Docker compartilhada, se ela ainda não existir:
102
+
103
+
```bash
104
+
docker network create vagas-net
105
+
```
106
+
107
+
Se a rede já existir, o Docker vai avisar e você pode seguir para o próximo passo.
108
+
109
+
4. Suba Postgres e Valkey:
110
+
111
+
```bash
112
+
docker compose -f docker-compose.infra.yml up -d
113
+
```
114
+
115
+
5. Suba scraper, backend e frontend:
116
+
117
+
```bash
118
+
docker compose up --build -d
119
+
```
120
+
121
+
6. Aplique as migrations do backend:
80
122
81
123
```bash
82
-
npm install
124
+
docker compose exec backend npm run db:migrate
83
125
```
84
126
85
-
### Execução web (frontend + backend)
127
+
7. Acesse os serviços:
128
+
129
+
- Frontend: http://localhost:5173
130
+
- Backend health: http://localhost:3001/health
131
+
- Scraper health: http://localhost:8081/health
132
+
- Vagas salvas no scraper: http://localhost:8081/admin/jobs/count
133
+
134
+
### Desenvolvimento com Node local
135
+
136
+
Use este fluxo quando quiser rodar frontend/backend fora do Docker. Mantenha Postgres e Valkey ativos no Docker e configure URLs locais nos arquivos `.env`.
137
+
138
+
Arquivos esperados:
139
+
140
+
-`.env`: usado pela infra/scraper e por comandos auxiliares.
141
+
-`backend/.env`: usado pelo backend local.
142
+
-`frontend/.env`: usado pelo Vite local.
143
+
144
+
Criação dos arquivos locais:
145
+
146
+
```bash
147
+
cp backend/.env.example backend/.env
148
+
cp frontend/.env.example frontend/.env
149
+
```
150
+
151
+
No Windows PowerShell:
152
+
153
+
```powershell
154
+
Copy-Item backend/.env.example backend/.env
155
+
Copy-Item frontend/.env.example frontend/.env
156
+
```
157
+
158
+
Comandos:
86
159
87
160
```bash
88
161
npm run dev
@@ -174,6 +247,8 @@ Usuários:
174
247
175
248
Jobs:
176
249
250
+
- GET /jobs
251
+
- GET /jobs/files
177
252
- GET /jobs/search
178
253
179
254
Keywords:
@@ -195,47 +270,67 @@ Swagger:
195
270
196
271
## Docker (infra + aplicação)
197
272
198
-
Este projeto separa infraestrutura de aplicação em dois arquivos compose.
273
+
Este projeto separa infraestrutura e aplicação em dois arquivos Compose:
199
274
200
-
1. Criar rede compartilhada (necessário uma vez):
275
+
-`docker-compose.infra.yml`: Postgres + Valkey.
276
+
-`docker-compose.yml`: scraper Go + backend + frontend.
Observação: os volumes Docker preservam os dados do Postgres e do Valkey entre execuções. Se você alterar `POSTGRES_USER`, `POSTGRES_PASSWORD` ou `POSTGRES_DB` depois da primeira inicialização, será necessário recriar o volume do Postgres ou manter os valores antigos.
312
+
313
+
Dentro dos containers, serviços devem usar os nomes da rede Docker:
314
+
315
+
- Postgres: `postgres:5432`
316
+
- Valkey: `valkey:6379`
317
+
- Scraper: `scraper-go:8081`
318
+
319
+
Por isso o `docker-compose.yml` sobrescreve `DATABASE_URL`, `VALKEY_URL`, `GO_SCRAPER_URL` e `SCRAPER_URL` para os valores internos corretos.
320
+
233
321
Serviços padrão:
234
322
235
323
- Frontend: http://localhost:5173
236
324
- Backend: http://localhost:3001
237
325
- Scraper Go: http://localhost:8081
238
326
327
+
Endpoints úteis do scraper:
328
+
329
+
- Health: http://localhost:8081/health
330
+
- Status da execução: http://localhost:8081/admin/scrape/status
331
+
- Contagem de vagas salvas: http://localhost:8081/admin/jobs/count
332
+
- Lista de vagas salvas: http://localhost:8081/admin/jobs
333
+
239
334
## Desktop com Electron
240
335
241
336
O app desktop empacota frontend + backend e inicia a aplicação com Electron.
@@ -259,13 +354,23 @@ Saída esperada do instalador:
259
354
260
355
## Variáveis de ambiente
261
356
262
-
Arquivo base:
357
+
Arquivos de exemplo:
263
358
359
+
- .env.example
264
360
- backend/.env.example
361
+
- frontend/.env.example
265
362
266
-
Arquivo local:
363
+
Arquivos locais ignorados pelo Git:
267
364
365
+
- .env
268
366
- backend/.env
367
+
- frontend/.env
368
+
369
+
Uso recomendado:
370
+
371
+
- Docker Compose: copie `.env.example` para `.env`. O Compose usa esse arquivo para infra, scraper, backend e build do frontend.
Copy file name to clipboardExpand all lines: SCRAPER.md
+6-2Lines changed: 6 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -122,15 +122,19 @@ cd scraper-go
122
122
go run ./cmd/server
123
123
```
124
124
125
-
Docker: há um `Dockerfile` em `scraper-go/`.
125
+
Docker: há um `Dockerfile` em `scraper-go/`. No Docker Compose, configure `VALKEY_URL=redis://valkey:6379/0` no `.env` da raiz para que o scraper acesse o Valkey pelo nome do serviço na rede Docker.
126
126
127
127
## Endpoints HTTP
128
128
129
129
O serviço expõe endpoints HTTP (implementação em `cmd/server` e arquivos associados). Principais rotas:
130
130
131
131
- POST `/scrape` — body JSON com `ScrapeRequest` para disparar uma busca em todas as fontes configuradas. Retorna `ScrapeResponse` com `jobs`, `total`, `cachedAt` e `fromCache`.
132
+
- GET `/health` — verifica se o scraper está online e qual cache está em uso.
132
133
- GET `/api/keywords` — retorna as keywords atualmente carregadas.
133
134
- POST `/api/keywords` — atualiza/persiste as keywords (aceita `keywords: string[]`).
135
+
- GET `/admin/scrape/status` — informa se existe uma execução em andamento.
136
+
- GET `/admin/jobs/count` — retorna a quantidade de vagas persistidas no Valkey.
137
+
- GET `/admin/jobs` — lista as vagas persistidas no Valkey.
134
138
135
139
Exemplo de `ScrapeRequest` (JSON):
136
140
@@ -230,7 +234,7 @@ Boas práticas nos adaptadores:
-`VALKEY_URL` — conexão Redis/Valkey. Em Docker Compose, use `redis://valkey:6379/0`; em execução local fora do Docker, use uma URL acessível pelo host, por exemplo `redis://localhost:6379/0`.
234
238
-`JOOBLE_API_KEY` — Jooble integration.
235
239
-`ADZUNA_APP_ID` / `ADZUNA_APP_KEY` — Adzuna API.
236
240
- Configurações de logging e quota podem ser definidas via `.env`.
0 commit comments