Skip to content

Repository files navigation

API de CRUD de Notas

API REST simples em Node.js + TypeScript para gerenciar notas, com PostgreSQL, Drizzle ORM, validação Zod e autenticação por token opaco.

Pré-requisitos

  • Node.js 20+
  • Docker e Docker Compose

Setup

  1. Instale as dependências:
npm install
  1. Copie o arquivo de ambiente (já existe .env no projeto; use o exemplo se precisar recriar):
cp .env.example .env
  1. Suba o PostgreSQL:
docker compose up -d
  1. Gere e aplique as migrations:
npm run db:generate
npm run db:migrate

Breaking change: a tabela notes passa a exigir id_user (FK para users). Em desenvolvimento local, se já houver notas sem dono, limpe o banco ou recrie o volume antes de migrar.

  1. (Opcional) Popule usuários e notas de exemplo:
npm run db:seed

Usuários de seed:

EmailSenha
demo@example.compassword123
alice@example.compassword123
  1. Inicie a API em modo desenvolvimento:
npm run dev

A API fica disponível em http://localhost:3000.

Autenticação

A sessão é um token aleatório opaco gerado no register/login e persistido em users.token (não é JWT).

  1. Faça register ou login e guarde o token da resposta.
  2. Envie nas rotas de notas: Authorization: Bearer <token>.
  3. Cada login gera um novo token e invalida o anterior.

Cada nota pertence a um usuário (notes.id_user). Listagem e acesso individual são restritos ao dono.

Scripts

ScriptDescrição
npm run devSobe a API com hot reload (tsx watch)
npm run buildCompila TypeScript para ./dist
npm run db:generateGera migrations a partir do schema
npm run db:migrateAplica migrations no banco
npm run db:seedInsere usuários e notas de exemplo

Endpoints

Auth (públicos)

MétodoPathDescrição
POST/auth/registerCriar usuário e obter token
POST/auth/loginAutenticar e obter novo token

Notes (protegidos)

MétodoPathDescrição
POST/notesCriar nota do usuário autenticado
GET/notesListar notas do usuário autenticado
GET/notes/:idBuscar nota própria por id
PUT/notes/:idAtualizar nota própria
DELETE/notes/:idExcluir nota própria

Exemplos

Registrar

curl -X POST http://localhost:3000/auth/register \
-H "Content-Type: application/json" \
-d '{"email":"user@example.com","password":"secret123"}'

Login

curl -X POST http://localhost:3000/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"demo@example.com","password":"password123"}'

Criar nota

curl -X POST http://localhost:3000/notes \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <token>" \
-d '{"title":"Minha nota","content":"Conteúdo da nota"}'

Listar notas

curl http://localhost:3000/notes \
-H "Authorization: Bearer <token>"

Buscar por id

curl http://localhost:3000/notes/<uuid> \
-H "Authorization: Bearer <token>"

Atualizar nota

curl -X PUT http://localhost:3000/notes/<uuid> \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <token>" \
-d '{"title":"Título atualizado","content":"Novo conteúdo"}'

Excluir nota

curl -X DELETE http://localhost:3000/notes/<uuid> \
-H "Authorization: Bearer <token>"

Variáveis de ambiente

VariávelExemplo
PORT3000
DATABASE_URLpostgresql://notes:notes@localhost:6000/notes

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages