API REST construída com AdonisJS v5 + Lucid para gerenciar tarefas (“notes”) conforme o desafio. Implementa CRUD completo, filtros de busca e PostgreSQL como banco de dados.
- AdonisJS v5 (Node 16.x requerido)
- Lucid ORM 18.x
- PostgreSQL (config via
.env) - Luxon (
DateTime) para timestamps
Campos:
id(PK, auto-increment)title(string, obrigatório)description(text, opcional)color(enum:yellow|blue|green|peach, padrãoyellow)is_favorite(boolean, padrãofalse)created_at/updated_at(timestamps)
- Cria tipo enum nativo no Postgres (
task_color) - Cria tabela
taskscom as colunas acima
GET /— healthcheck simplesPOST /tasks— cria tarefaGET /tasks— lista tarefas (com filtros)PATCH /tasks/:id— atualização parcialDELETE /tasks/:id— exclusão
.adonisrc.jsonatualizado (providers/commands do Lucid)config/database.tspreparado para PostgreSQL.envde exemplo comPG_HOST,PG_PORT,PG_USER,PG_PASSWORD,PG_DB_NAME,DB_CONNECTION=pg- Corrigido erro de datas do Lucid: uso de
@column.dateTime()(substitui o legadoDateTimeColumn) - Corrigido erro de env: inclusão de
DRIVE_DISK=localquando o validador exige
app/
Controllers/
Http/
TasksController.ts
Models/
Task.ts
config/
database.ts
database/
migrations/
0000000000000_create_tasks_table.ts
start/
routes.ts
.env (exemplo)
- Node 16.x (use
nvmse necessário) - PostgreSQL rodando e com um database criado
Selecionar Node 16:
nvm install 16
nvm use 16Instalar dependências:
npm ciConfigurar .env:
# App
PORT=3333
HOST=0.0.0.0
NODE_ENV=development
APP_KEY=alguma-chave-secreta
# Banco
DB_CONNECTION=pg
PG_HOST=127.0.0.1
PG_PORT=5432
PG_USER=corelab
PG_PASSWORD=corelab
PG_DB_NAME=corelab
# Necessário para o validador de env do Adonis
DRIVE_DISK=localGerar/atualizar manifest do Ace (se precisar):
node ace generate:manifestRodar migrações:
node ace migration:runSubir o servidor:
npm run dev
# http://127.0.0.1:3333GET /
Resposta:
{ Rota_Está_Funcionando: true }POST /tasks
Body:
{
"title": "Projeto Corelab",
"description": "Modelo + Controller",
"color": "yellow",
"isFavorite": false
}cURL:
curl -s -X POST http://127.0.0.1:3333/tasks -H "Content-Type: application/json" -d '{"title":"Projeto Corelab","description":"Modelo + Controller","color":"yellow","isFavorite":false}'GET /tasks
Query params:
q— busca parcial emtitleedescriptionfavorite—true|false
Exemplos:
curl -s http://127.0.0.1:3333/tasks | jq .
curl -s "http://127.0.0.1:3333/tasks?q=Adonis&favorite=true" | jq .PATCH /tasks/:id
Body (exemplos):
{ "title": "Projeto Corelab V5", "color": "blue" }{ "isFavorite": true }cURL:
curl -s -X PATCH http://127.0.0.1:3333/tasks/1 -H "Content-Type: application/json" -d '{"title":"Projeto Corelab V5","color":"blue"}' | jq .DELETE /tasks/:id
curl -i -X DELETE http://127.0.0.1:3333/tasks/1- Enum nativo Postgres (
task_color) para integridade e validação mais segura decolor. - Busca simples via
qemtitle/descriptione filtro booleanofavorite. - Compatibilidade: projeto requer Node ^16.15.0 — recomenda-se
nvmpara alternar versões. - Correções conhecidas:
DRIVE_DISKausente → definirDRIVE_DISK=localno.env.- Decorators de data → usar
@column.dateTime()(Lucid 18) no lugar do legadoDateTimeColumn.
- Validações com
@adonisjs/validator. - Paginação no
GET /tasks. - Testes automatizados (Japa) para fluxos e erros.
- CORS / rate-limit caso seja exposto publicamente.