Cincoders

Leitura Obrigatória

Leitura Obrigatória

Este boilerplate assume que você já sabe o que é um framework web, um ORM e uma API REST. Se você está no início da graduação e nunca trabalhou com nada disso, comece por aqui — sem essa base, o resto da documentação vai parecer uma lista de nomes soltos.

Não precisa ler tudo de uma vez. Leia a seção de conceitos abaixo antes de rodar o projeto, e volte para a documentação do NestJS conforme for mexendo em cada camada (controller, service, etc).

🧠 Conceitos que você precisa entender primeiro

Antes de abrir o código, entenda estas quatro ideias. Elas aparecem em praticamente todo projeto backend, não só neste.

ConceitoPor que importa aquiLeitura recomendada
API RESTO projeto expõe endpoints HTTP (GET, POST, PUT, DELETE) que o frontend consomeO que é uma API REST (MDN)
ORM (Object-Relational Mapping)Em vez de escrever SQL na mão, usamos código TypeScript para representar tabelas e registrosO que é um ORM (artigo Prisma)
Migrations de banco de dadosToda alteração no schema do banco é versionada em arquivos, como um "git para a estrutura das tabelas"O que são migrations (guia Prisma)
Injeção de Dependências (DI)O NestJS gerencia a criação de classes automaticamente; você nunca dá new Service() na mãoIntrodução à Injeção de Dependências (docs NestJS)

Se algum desses termos ainda parecer abstrato depois de ler, não tem problema — vai ficar mais claro quando você vir o código de verdade. O importante é reconhecer o nome quando ele aparecer.

📘 Documentação Oficial do NestJS

O NestJS é o framework que estrutura toda a aplicação. Ele organiza o código em módulos, cada um com suas próprias camadas. Leia a documentação oficial nesta ordem — ela segue o mesmo caminho que uma requisição HTTP percorre dentro do projeto:

  1. First Steps — visão geral de como um projeto NestJS é estruturado.
  2. Controllers — a camada que recebe a requisição HTTP (rota, método, parâmetros). É o "porteiro" da aplicação: só direciona, não tem lógica de negócio.
  3. Providers / Services — onde mora a lógica de negócio de verdade. O controller chama o service, o service faz o trabalho.
  4. Modules — como controllers, services e outras dependências são agrupados por funcionalidade (ex: módulo de task, módulo de health).
  5. Pipes — validam e transformam dados de entrada antes de chegarem no controller (neste projeto, isso é feito com Zod, veja abaixo).
  6. Custom Providers — entenda como uma classe é registrada para ser injetada em outra (fundamental para entender o padrão repository usado aqui, onde o service depende do Prisma através de DI).

Não existe uma página "repository" separada na documentação do NestJS — no nosso caso, esse papel é feito pelo PrismaClient injetado diretamente nos services. Veja Persistência & Migrations para como isso funciona neste projeto.

Depois de ler essas seis páginas, volte para Visão Geral da Arquitetura — vai fazer muito mais sentido.

🗄️ Prisma (ORM) e PostgreSQL

🔐 Autenticação: JWT e Keycloak

O projeto não implementa login do zero — ele valida tokens emitidos por um serviço externo (Keycloak). Para entender esse fluxo:

Depois de entender o básico, leia Autenticação & Autorização — a página explica o que é o Keycloak e traz um diagrama do fluxo completo, do login até a validação do token dentro do backend.

✅ Validação de dados: Zod

Todo dado que entra na API (body de um POST, query params, etc) passa por uma validação com Zod antes de chegar no controller.

  • Zod — Basic usage: como declarar um schema e validar um objeto.
  • nestjs-zod: a biblioteca que conecta o Zod ao ciclo de vida do NestJS (usada nos DTOs deste projeto, como PaginationQueryDto).

🧪 Testes: Vitest

🧭 Como estudar isso na prática

  1. Leia a seção de conceitos no topo desta página.
  2. Suba o projeto seguindo o Setup Rápido.
  3. Abra o código de um módulo simples, o health, e leia na ordem: *.controller.ts → *.service.ts → *.module.ts.
  4. Toda vez que encontrar um decorator ou conceito que não conhece (@Injectable(), @Controller(), pipe, DTO), volte para a documentação oficial correspondente listada acima.
  5. Só depois disso, avance para o módulo mais completo, task, que já usa banco de dados e paginação.

On this page