Projeto Final: API Completa em TypeScript
2 min de leitura
fonte
Você percorreu a linguagem, a configuração, o runtime, Express e o ORM. Agora é hora de juntar tudo num projeto real: uma API completa em TypeScript, com validação, persistência, autenticação e testes.
Esse projeto reaproveita o brief de
api-rest-com-autenticacao
- a diferença é que você vai implementar em TypeScript.
O que você vai construir
Uma API REST com:
- CRUD de usuários (criar, listar, atualizar, deletar) com validação Zod no input.
- Login com JWT retornando token, e middleware que protege rotas privadas.
- Banco PostgreSQL via Prisma, com migrations versionadas.
- Testes com Vitest (unit + integração).
- Docker Compose pra subir app + banco com um comando.
Tudo tipado: req.body validado pelo Zod vira tipo seguro, retorno
do Prisma já vem tipado, erros customizados com HttpError em
toda a rota.
Estrutura de pastas sugerida
src/
├── server.ts # bootstrap (app.listen)
├── app.ts # configuração do Express (sem listen)
├── routes/
│ ├── usuarios.ts # router com CRUD
│ └── auth.ts # login + refresh
├── middleware/
│ ├── auth.ts # valida JWT, popula req.usuarioId
│ └── error.ts # middleware central de erro
├── schemas/
│ └── usuario.ts # schemas Zod (CriarUsuario, AtualizarUsuario)
├── lib/
│ ├── prisma.ts # singleton do PrismaClient
│ └── jwt.ts # sign/verify do token
└── types.ts # declare global Express.Request
prisma/
└── schema.prisma # model Usuario, model Sessao
tests/
├── usuarios.test.ts # integração (supertest)
└── schemas.test.ts # unitário (Zod)
Roteiro sugerido
Não precisa seguir linha-a-linha, mas o caminho testado é:
- Setup do projeto -
npm init -y, instalar deps (express,@prisma/client,zod,jsonwebtoken,bcrypt), dev deps (typescript,tsx,@types/...,vitest,supertest,prisma). tsconfig.json- copie o do nóconfigurando-typescript, ajuste paths.- Prisma schema + primeira migration -
npx prisma init, modelUsuario,npx prisma migrate dev --name init. - Schemas Zod -
CriarUsuarioSchema,AtualizarUsuarioSchema,LoginSchema. - Rotas de usuário - CRUD com validação Zod, erros tipados, middleware central.
- Auth - rota de login, geração de JWT, middleware
authMiddleware. - Testes - unitários dos schemas, integração das rotas com supertest.
- Docker Compose - app + Postgres, healthcheck no banco, app sobe depois do banco.
Critérios de aceite
A API está pronta quando:
npm run devsobe o servidor em watch mode e conecta no banco.POST /usuariosvalida input, retorna 400 com erro do Zod em input inválido, 201 com usuário criado em input válido.POST /loginretorna 401 em credenciais erradas, 200 + JWT em credenciais certas.GET /perfilretorna 401 sem token, 200 com dados do usuário com token válido.npm testroda os testes e tudo passa.docker compose upsobe app + banco do zero.
O que esse projeto testa de TypeScript
- Configurar
tsconfig.jsondo zero. - Tipar
req,rese middlewares. - Estender
Express.RequestcomusuarioId. - Inferir tipos de
z.infer<...>pra input de rota. - Consumir tipos gerados do Prisma.
- Tratar erros com narrowing (
instanceof HttpError).
Se você chegou aqui, você sabe programar em TypeScript - não só escrever a sintaxe, mas tirar proveito do que a tipagem estática oferece.
// recursos
// avaliação da trilha
—
ainda sem avaliações