API REST construída com NestJS, autenticação JWT e ORM Prisma sobre PostgreSQL.
- Visão Geral
- Stack Técnica
- Modelos (Prisma)
- Autenticação & Autorização
- Endpoints Principais
- Como Rodar Localmente
- Scripts NPM
- Variáveis de Ambiente
- Migrações & Prisma
- Testes
- Estrutura de Pastas
- Roadmap / Próximos Passos
Este projeto fornece uma API de usuários e tarefas, com cadastro/login, emissão de token JWT, controle de acesso por papéis (roles) e operações CRUD de tarefas com verificação de propriedade.
- Node.js / TypeScript
- NestJS 10
- Prisma ORM (PostgreSQL)
- JWT (@nestjs/jwt)
- Bcrypt para hashing de senhas
- Class-Validator / Class-Transformer para validação
- ESLint + Prettier para qualidade de código
- Jest / Supertest para testes
model user {
  id       Int    @id @default(autoincrement())
  email    String @unique
  name     String
  password String
  tasks    task[]
  roles    role[] @default([USER])
}
model task {
  id          Int      @id @default(autoincrement())
  title       String
  description String?
  completed   Boolean  @default(false)
  createdAt   DateTime @default(now())
  updatedAt   DateTime @updatedAt
  author      user?    @relation(fields: [authorId], references: [id])
  authorId    Int?
}
enum role {
  USER
  ADMIN
  MODERATOR
  EDITOR
}
Fluxo:
- SignUp cria usuário (senha hash com bcrypt) e já retorna access_token.
- Login valida credenciais e devolve access_token JWT com payload: sub,username,roles.
- AuthGuardvalida o token em rotas protegidas.
- RolesGuard(em- user.controller) filtra acesso baseado no decorator- @Roles().
- TaskOwnershipGuardgarante que apenas o autor manipule a própria task.
| Método | Rota | Body | Descrição | 
|---|---|---|---|
| POST | /signup | { email, password, name } | Cria usuário e retorna JWT | 
| POST | /login | { email, password } | Autentica e retorna JWT | 
| Método | Rota | Auth | Descrição | 
|---|---|---|---|
| GET | / | JWT | Dados do usuário autenticado | 
| GET | /all | JWT + role ADMIN | Lista todos usuários | 
| Método | Rota | Auth | Body / Param | Descrição | 
|---|---|---|---|---|
| POST | / | JWT | { title, description? } | Cria task vinculada ao usuário | 
| PATCH | /:id | JWT + dono | { title?, description? } | Atualiza task | 
| GET | /:id | JWT + dono | - | Retorna task específica | 
| DELETE | /:id | JWT + dono | - | Remove task | 
Obs: Endpoint de listagem geral de tasks não implementado ainda.
Pré-requisitos: Node 18+, PostgreSQL em execução e string de conexão.
# instalar dependências
npm install
# configurar variáveis (.env)
cp .env.example .env  # (crie se não existir)
# gerar cliente Prisma
npx prisma generate
# aplicar migrações (cria tabelas)
npx prisma migrate dev --name init
# iniciar em desenvolvimento (watch)
npm run start:devAPI por padrão em: http://localhost:3000
| Script | Descrição | 
|---|---|
| start | Inicia (carrega .env) | 
| start:dev | Watch mode | 
| start:prod | Executa build transpilado ( dist) | 
| build | Transpila TypeScript | 
| lint | ESLint com autofix | 
| format | Prettier nos arquivos fonte | 
| test | Testes unitários | 
| test:e2e | Testes end-to-end | 
| test:cov | Cobertura de testes | 
Criar arquivo .env com, por exemplo:
DATABASE_URL="postgresql://USER:PASS@localhost:5432/stoix?schema=public"
JWT_SECRET="uma_chave_segura"
Certifique-se de usar secret forte em produção.
- Schema principal: prisma/schema.prisma
- Gerar cliente: npx prisma generate
- Nova migração: npx prisma migrate dev --name descricao
- Visualizar DB: npx prisma studio
Executar:
npm run test        # unit
npm run test:e2e    # e2e
npm run test:cov    # coberturaArquivos de teste e2e em test/.
src/
  auth/        (signup, login, JWT)
  user/        (endpoints de usuário, roles)
  task/        (CRUD de tasks + guards de propriedade)
  role/        (Roles decorator e guard)
  database/    (Prisma service/module)
  exceptions/  (exceções custom)
  middlewares/ (middlewares futuros)
prisma/        (schema e migrações)
generated/     (cliente Prisma gerado)
- Listagem paginada de tasks do usuário
- Marcar task como concluída / toggle
- Refresh token / logout
- Auditoria de alterações
- Documentação OpenAPI (Swagger)
- Rate limiting
Ajuda adicional ou contribuição, abra uma issue ou PR.