Skip to content

Repository files navigation

Task API

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.

Tecnologias

  • 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

Estrutura do projeto

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

Como rodar

npm install
npm run dev # http://localhost:3000

Variáveis de ambiente (opcionais):

VariávelPadrãoDescrição
PORT3000Porta do servidor
DB_PATH./data.dbCaminho 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

Endpoints

MétodoRotaDescrição
GET/healthHealth check
GET/api/tasksLista todas as tarefas (aceita ?status=)
GET/api/tasks/:idBusca uma tarefa por id
POST/api/tasksCria uma tarefa
PUT/api/tasks/:idAtualiza uma tarefa
DELETE/api/tasks/:idRemove uma tarefa

status aceita: pendente, em_andamento, concluida.

Exemplo — criar tarefa

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"
}

Testes

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 test

Testando manualmente (Postman/Insomnia)

Importe 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.

Sobre o uso de IA no desenvolvimento

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.

Possíveis melhorias futuras

  • Paginação na listagem de tarefas
  • Autenticação (JWT)
  • Migração de node:sqlite para PostgreSQL em produção
  • Deploy (Render/Railway) e CI com GitHub Actions rodando npm test a cada push

About

API REST de tarefas em Node.js + TypeScript, com SQLite e testes automatizados. Projeto de estudo com apoio de IA.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages