API REST simples de gerenciamento de tarefas (to-do list), construída em Node.js + TypeScript, com persistência em SQLite e testes automatizados.
Projeto pessoal criado para praticar Node.js, TypeScript, SQL e testes de API — com apoio de IA generativa durante o desenvolvimento.
- Node.js + TypeScript
- Express — framework HTTP
- node:sqlite — módulo nativo de SQLite do Node (sem dependências externas/compilação nativa), usado para praticar SQL puro (
CREATE TABLE,INSERT,SELECT,UPDATE,DELETE) - Vitest + Supertest — testes automatizados de API
- tsx — execução de TypeScript em desenvolvimento
src/
types.ts # tipos e contratos (Task, inputs)
db.ts # conexão SQLite + migração da tabela
taskRepository.ts # camada de acesso a dados (SQL puro)
validation.ts # validações de entrada
taskController.ts # handlers das rotas (regras HTTP)
routes.ts # definição das rotas
app.ts # instância do Express (usada também nos testes)
server.ts # ponto de entrada (sobe o servidor)
tests/
tasks.test.ts # testes de integração de toda a API
postman/
task-api.postman_collection.json # coleção para testes manuais
npm install
npm run dev # http://localhost:3000Variáveis de ambiente (opcionais):
| Variável | Padrão | Descrição |
|---|---|---|
PORT |
3000 |
Porta do servidor |
DB_PATH |
./data.db |
Caminho do arquivo SQLite (:memory: para banco em memória) |
Outros comandos:
npm run build # compila para dist/
npm start # roda a versão compilada
npm test # roda a suíte de testes automatizados
npm run typecheck # checa tipos sem gerar arquivos| Método | Rota | Descrição |
|---|---|---|
| GET | /health |
Health check |
| GET | /api/tasks |
Lista todas as tarefas (aceita ?status=) |
| GET | /api/tasks/:id |
Busca uma tarefa por id |
| POST | /api/tasks |
Cria uma tarefa |
| PUT | /api/tasks/:id |
Atualiza uma tarefa |
| DELETE | /api/tasks/:id |
Remove uma tarefa |
status aceita: pendente, em_andamento, concluida.
curl -X POST http://localhost:3000/api/tasks \
-H "Content-Type: application/json" \
-d '{"title": "Estudar SQL", "description": "Praticar joins"}'{
"id": 1,
"title": "Estudar SQL",
"description": "Praticar joins",
"status": "pendente",
"created_at": "2026-07-23 23:00:00",
"updated_at": "2026-07-23 23:00:00"
}A suíte em tests/tasks.test.ts cobre, para cada rota, os três tipos de cenário que costumam aparecer em análise de qualidade de software:
- Caso de sucesso (ex.: criar e listar tarefas)
- Caso de erro de validação (ex.: criar tarefa sem
title, status inválido →400) - Caso de recurso não encontrado / regressão de contrato (ex.: buscar/atualizar/remover id inexistente →
404)
npm testImporte postman/task-api.postman_collection.json no Postman ou no Insomnia. A coleção já inclui, além dos casos de sucesso, requisições propositalmente inválidas (sem title, status inválido, id inexistente) para validar o tratamento de erros da API.
Este projeto foi estruturado com apoio do Claude (Anthropic): definição da arquitetura em camadas (rotas → controller → repositório → banco), revisão de código, e escrita da suíte de testes automatizados. As decisões de escopo, tecnologia e o código final foram revisados e compreendidos por mim.
- Paginação na listagem de tarefas
- Autenticação (JWT)
- Migração de
node:sqlitepara PostgreSQL em produção - Deploy (Render/Railway) e CI com GitHub Actions rodando
npm testa cada push