docs(rls): Add SQL script and RLS setup guide - Tasks table with Row Level Security
This commit is contained in:
@@ -1,34 +1,67 @@
|
||||
# ✅ PROGRESSO - FASE 1: BACKEND (50% COMPLETO)
|
||||
# ✅ PROGRESSO - FASE 1: BACKEND (70% COMPLETO)
|
||||
|
||||
**Data Atualização**: 1 de dezembro de 2025 (Sessão 1 Finalizada)
|
||||
**Última Versão**: v0.1.0 (Initial: Auth + Design System)
|
||||
**Git Commits**: 2 (35272b8, b51c598)
|
||||
**Data Atualização**: 1 de dezembro de 2025 (Sessão 1 em Progresso)
|
||||
**Última Versão**: v0.2.0 (Tasks Module + RLS)
|
||||
**Git Commits**: 4 (35272b8, b51c598, 58df03d, 6a73cce)
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Progresso Geral
|
||||
|
||||
```
|
||||
Fase 1: Backend [████████████░░░░░░░░░░░░] 50% ✅
|
||||
Fase 1: Backend [██████████████████░░░░░░░░] 70% ✅
|
||||
├─ Setup [████████████████████░] 100% ✅
|
||||
├─ Auth Module [████████████████████░] 100% ✅
|
||||
├─ Tasks Module [░░░░░░░░░░░░░░░░░░░░░] 0%
|
||||
├─ RLS Supabase [░░░░░░░░░░░░░░░░░░░░░] 0%
|
||||
├─ API Docs [████████████░░░░░░░░░] 60%
|
||||
├─ Tasks Module [████████████████████░] 100% ✅
|
||||
├─ RLS Supabase [██████████████░░░░░░░] 75% 🟡
|
||||
├─ API Docs [████████████████████░] 100% ✅
|
||||
└─ Dockerfile [░░░░░░░░░░░░░░░░░░░░░] 0%
|
||||
|
||||
Fase 2: Frontend [░░░░░░░░░░░░░░░░░░░░░] 0%
|
||||
Fase 3: Mobile [░░░░░░░░░░░░░░░░░░░░░] 0%
|
||||
Fase 4: DevOps/Deploy [░░░░░░░░░░░░░░░░░░░░░] 0%
|
||||
|
||||
TOTAL [████░░░░░░░░░░░░░░░░░░░░] 12%
|
||||
TOTAL [████████░░░░░░░░░░░░░░░░░] 17%
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📋 O QUE FOI IMPLEMENTADO
|
||||
|
||||
**Dependências Instaladas**:
|
||||
**Commit 1 - Initial Setup**:
|
||||
- ✅ 49 dependências instaladas
|
||||
- ✅ Configuração centralizada (ConfigModule)
|
||||
- ✅ Auth Module completo (JWT + Supabase)
|
||||
- ✅ Design System documentado
|
||||
|
||||
**Commit 2 - Documentation Reorganization**:
|
||||
- ✅ Documentação movida para `docs/ia/`
|
||||
- ✅ Roadmap e Progresso criados
|
||||
|
||||
**Commit 3 - Roadmap Update**:
|
||||
- ✅ ROADMAP_EXECUCAO.md com todos os 4 fases
|
||||
- ✅ PROGRESSO.md atualizado para 50%
|
||||
|
||||
**Commit 4 - Tasks Module** (NOVO):
|
||||
- ✅ `tasks.service.ts` com 6 métodos (CRUD + stats)
|
||||
- ✅ `tasks.controller.ts` com 6 endpoints protegidos
|
||||
- ✅ `create-task.dto.ts` com validações
|
||||
- ✅ `update-task.dto.ts` para PATCH
|
||||
- ✅ `tasks.module.ts` integrado ao app.module.ts
|
||||
- ✅ API.md atualizado com todos endpoints
|
||||
|
||||
**Commit 4 (Preparando) - RLS Setup**:
|
||||
- ✅ `SQL_TASKS_TABLE_RLS.sql` - Script completo com:
|
||||
- Criação da tabela `tasks` com schema completo
|
||||
- Índices para performance (5 índices)
|
||||
- Row Level Security (4 políticas)
|
||||
- Trigger automático para `updated_at`
|
||||
- Comentários e documentação inline
|
||||
- ✅ `RLS_SETUP_GUIDE.md` - Guia passo a passo:
|
||||
- Como executar no Supabase SQL Editor
|
||||
- Como testar RLS
|
||||
- Troubleshooting
|
||||
- Integração com backend
|
||||
- ✅ `@supabase/supabase-js` - Cliente Supabase
|
||||
- ✅ `@nestjs/config` - Configuração centralizada
|
||||
- ✅ `@nestjs/jwt` - JWT para autenticação
|
||||
@@ -73,42 +106,87 @@ backend-api/
|
||||
|
||||
---
|
||||
|
||||
### ✅ Passo 1.2: Módulo de Autenticação (COMPLETO)
|
||||
### ✅ Passo 1.3: Módulo de Tarefas (COMPLETO) - NOVO
|
||||
|
||||
**Implementado**:
|
||||
|
||||
#### Auth Service (`auth.service.ts`)
|
||||
- ✅ `signup()` - Registrar usuário
|
||||
- ✅ `login()` - Fazer login
|
||||
- ✅ `logout()` - Fazer logout
|
||||
- ✅ `validateToken()` - Validar JWT
|
||||
- ✅ `requestPasswordReset()` - Recuperar senha
|
||||
- ✅ `generateToken()` - Gerar JWT
|
||||
#### Tasks Service (`tasks.service.ts`)
|
||||
- ✅ `create(userId, createTaskDto)` - Criar tarefa
|
||||
- ✅ `findAll(userId, filters)` - Listar com filtros
|
||||
- ✅ `findOne(id, userId)` - Obter tarefa específica
|
||||
- ✅ `update(id, userId, updateTaskDto)` - Atualizar tarefa
|
||||
- ✅ `remove(id, userId)` - Deletar tarefa
|
||||
- ✅ `getStats(userId)` - Obter estatísticas
|
||||
|
||||
#### Auth Controller (`auth.controller.ts`)
|
||||
- ✅ `POST /auth/signup` - Registrar
|
||||
- ✅ `POST /auth/login` - Login
|
||||
- ✅ `POST /auth/logout` - Logout
|
||||
- ✅ `GET /auth/me` - Perfil atual
|
||||
- ✅ `POST /auth/forgot-password` - Recuperar senha
|
||||
#### Tasks Controller (`tasks.controller.ts`)
|
||||
- ✅ `POST /tasks` - Criar tarefa
|
||||
- ✅ `GET /tasks` - Listar com query filters
|
||||
- ✅ `GET /tasks/stats` - Estatísticas
|
||||
- ✅ `GET /tasks/:id` - Obter tarefa
|
||||
- ✅ `PATCH /tasks/:id` - Atualizar tarefa
|
||||
- ✅ `DELETE /tasks/:id` - Deletar tarefa
|
||||
|
||||
#### DTOs e Validações
|
||||
- ✅ `CreateTaskDto` - title (obrigatório), description, dueDate, category, priority, completed
|
||||
- ✅ `UpdateTaskDto` - Todos campos opcionais (PATCH)
|
||||
- ✅ Validação com class-validator (min/max length, tipos)
|
||||
|
||||
#### Segurança
|
||||
- ✅ JWT Strategy - Extração e validação de tokens
|
||||
- ✅ JWT Guard - Proteção de rotas
|
||||
- ✅ CurrentUser Decorator - Injeção do usuário autenticado
|
||||
- ✅ Validação de DTOs com class-validator
|
||||
- ✅ Todos endpoints protegidos com `@UseGuards(JwtAuthGuard)`
|
||||
- ✅ Injeção automática de `userId` via `@CurrentUser()`
|
||||
- ✅ Validação de propriedade (usuário só acessa suas tarefas)
|
||||
|
||||
#### Features
|
||||
- ✅ Filtros: completed, category, priority
|
||||
- ✅ Ordenação: sortBy (created_at, due_date, priority), order (asc/desc)
|
||||
- ✅ Resposta estruturada com success, message, data
|
||||
- ✅ Tratamento de erros (BadRequestException, NotFoundException)
|
||||
|
||||
### 🟡 Passo 1.4: RLS no Supabase (75% COMPLETO) - NOVO
|
||||
|
||||
**Implementado**:
|
||||
|
||||
#### SQL Script (`SQL_TASKS_TABLE_RLS.sql`)
|
||||
- ✅ Criar tabela `tasks` com schema completo:
|
||||
- id, user_id, title, description, completed, due_date, category, priority
|
||||
- created_at, updated_at com timestamps
|
||||
- ✅ Criar 5 índices para performance:
|
||||
- idx_tasks_user_id
|
||||
- idx_tasks_completed
|
||||
- idx_tasks_created_at
|
||||
- idx_tasks_due_date
|
||||
- idx_tasks_user_completed
|
||||
- ✅ Habilitar RLS na tabela
|
||||
- ✅ Criar 4 políticas de segurança:
|
||||
- SELECT: Ver apenas tarefas próprias
|
||||
- INSERT: Criar apenas com user_id próprio
|
||||
- UPDATE: Atualizar apenas tarefas próprias
|
||||
- DELETE: Deletar apenas tarefas próprias
|
||||
- ✅ Criar trigger automático para updated_at
|
||||
- ✅ Adicionar comments SQL para documentação
|
||||
|
||||
#### Setup Guide (`RLS_SETUP_GUIDE.md`)
|
||||
- ✅ Passo a passo para executar no Supabase
|
||||
- ✅ Explicação detalhada das políticas RLS
|
||||
- ✅ 3 testes para validar implementação
|
||||
- ✅ Troubleshooting e soluções de erros
|
||||
- ✅ Referências e próximos passos
|
||||
|
||||
**Pendente (5%)**:
|
||||
- ❌ Executar script no Supabase SQL Editor (manual)
|
||||
- ❌ Testar isolamento de dados entre usuários
|
||||
|
||||
---
|
||||
|
||||
## 📊 Progresso Visual
|
||||
|
||||
```
|
||||
Fase 1: Backend [████████████░░░░░░░░░░░░] 50%
|
||||
Fase 1: Backend [██████████████████░░░░░░░░] 70%
|
||||
├─ Setup [████████████████████░] 100% ✅
|
||||
├─ Auth Module [████████████████████░] 100% ✅
|
||||
├─ Tasks Module [░░░░░░░░░░░░░░░░░░░░░] 0%
|
||||
├─ RLS Supabase [░░░░░░░░░░░░░░░░░░░░░] 0%
|
||||
├─ API Docs [████████████░░░░░░░░░] 60%
|
||||
├─ Tasks Module [████████████████████░] 100% ✅
|
||||
├─ RLS Supabase [██████████████░░░░░░░] 75% 🟡
|
||||
├─ API Docs [████████████████████░] 100% ✅
|
||||
└─ Dockerfile [░░░░░░░░░░░░░░░░░░░░░] 0%
|
||||
|
||||
Fase 2: Frontend [░░░░░░░░░░░░░░░░░░░░░] 0%
|
||||
@@ -169,91 +247,116 @@ NestJS Backend Architecture
|
||||
|
||||
---
|
||||
|
||||
## 📝 Próximas Ações (Passo 3)
|
||||
## 📝 Próximas Ações
|
||||
|
||||
### Passo 1.3: Módulo de Tarefas
|
||||
- [ ] Criar `tasks.service.ts` com CRUD
|
||||
- [ ] Criar `tasks.controller.ts` com endpoints
|
||||
- [ ] Criar DTOs (create-task, update-task)
|
||||
- [ ] Integrar com Supabase (query builder)
|
||||
- [ ] Adicionar validações
|
||||
### Passo 1.4: RLS no Supabase (MANUAL)
|
||||
1. ✅ Script SQL criado (`SQL_TASKS_TABLE_RLS.sql`)
|
||||
2. ✅ Guia de setup criado (`RLS_SETUP_GUIDE.md`)
|
||||
3. ➡️ **AÇÃO NECESSÁRIA**: Você deve executar o script no Supabase SQL Editor:
|
||||
- Acesse [Supabase Dashboard](https://supabase.com/dashboard)
|
||||
- Vá para SQL Editor
|
||||
- Cole o conteúdo de `SQL_TASKS_TABLE_RLS.sql`
|
||||
- Clique em RUN
|
||||
|
||||
### Passo 1.4: RLS no Supabase
|
||||
- [ ] Criar tabela `tasks` no Supabase
|
||||
- [ ] Implementar RLS policies
|
||||
- [ ] Testar isolamento de dados
|
||||
|
||||
### Passo 1.5: Completar Documentação
|
||||
- [ ] Adicionar endpoints de Tasks
|
||||
- [ ] Exemplos de uso (cURL)
|
||||
- [ ] Erros documentados
|
||||
### Passo 1.5: Testar Endpoints de Tasks
|
||||
- [ ] Testar CRUD via Postman/Insomnia
|
||||
- [ ] Validar filtros e ordenação
|
||||
- [ ] Verificar isolamento RLS entre usuários
|
||||
|
||||
### Passo 1.6: Dockerfile
|
||||
- [ ] Criar Dockerfile
|
||||
- [ ] Criar Dockerfile para backend
|
||||
- [ ] Criar docker-compose.yml
|
||||
- [ ] Testar containerização
|
||||
|
||||
---
|
||||
|
||||
## 🧪 Como Testar Agora
|
||||
|
||||
### 1. Configurar .env
|
||||
```bash
|
||||
cp backend-api/.env.example backend-api/.env
|
||||
# Editar com suas credenciais Supabase
|
||||
### 1. Executar RLS Script no Supabase (PENDENTE)
|
||||
```
|
||||
1. Vá para: https://supabase.com/dashboard
|
||||
2. SQL Editor → New Query
|
||||
3. Cole: backend-api/SQL_TASKS_TABLE_RLS.sql
|
||||
4. Clique: RUN
|
||||
5. Verifique: Sem erros vermelhos
|
||||
```
|
||||
|
||||
### 2. Rodar em desenvolvimento
|
||||
### 2. Testar Tasks Endpoints com cURL
|
||||
```bash
|
||||
# Criar tarefa
|
||||
curl -X POST http://localhost:3000/api/tasks \
|
||||
-H "Authorization: Bearer {token}" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"title":"Fazer compras","priority":"high"}'
|
||||
|
||||
# Listar tarefas
|
||||
curl -X GET "http://localhost:3000/api/tasks?completed=false&sortBy=due_date" \
|
||||
-H "Authorization: Bearer {token}"
|
||||
|
||||
# Obter estatísticas
|
||||
curl -X GET http://localhost:3000/api/tasks/stats \
|
||||
-H "Authorization: Bearer {token}"
|
||||
|
||||
# Atualizar tarefa
|
||||
curl -X PATCH http://localhost:3000/api/tasks/{id} \
|
||||
-H "Authorization: Bearer {token}" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"completed":true}'
|
||||
|
||||
# Deletar tarefa
|
||||
curl -X DELETE http://localhost:3000/api/tasks/{id} \
|
||||
-H "Authorization: Bearer {token}"
|
||||
```
|
||||
|
||||
### 3. Rodar Backend em Desenvolvimento
|
||||
```bash
|
||||
cd backend-api
|
||||
npm run start:dev
|
||||
```
|
||||
|
||||
### 3. Testar endpoints com cURL
|
||||
```bash
|
||||
# Signup
|
||||
curl -X POST http://localhost:3000/api/auth/signup \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"email":"test@example.com","password":"Test123456"}'
|
||||
|
||||
# Login
|
||||
curl -X POST http://localhost:3000/api/auth/login \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"email":"test@example.com","password":"Test123456"}'
|
||||
|
||||
# Get Profile (com token)
|
||||
curl -X GET http://localhost:3000/api/auth/me \
|
||||
-H "Authorization: Bearer {seu_token}"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📚 Arquivos Documentados
|
||||
|
||||
- ✅ `API.md` - Documentação completa dos endpoints
|
||||
- ✅ `ROADMAP_EXECUCAO.md` - Plano de execução
|
||||
- ✅ `API.md` - Documentação completa dos endpoints (Auth + Tasks)
|
||||
- ✅ `ROADMAP_EXECUCAO.md` - Plano de execução para 4 fases
|
||||
- ✅ `.env.example` - Template de variáveis
|
||||
- ✅ `SQL_TASKS_TABLE_RLS.sql` - Script SQL com RLS (NOVO)
|
||||
- ✅ `RLS_SETUP_GUIDE.md` - Guia passo a passo RLS (NOVO)
|
||||
|
||||
---
|
||||
|
||||
## 💡 O que você aprendeu nesta sessão
|
||||
|
||||
1. **Estrutura NestJS** - Módulos, Controllers, Services, Guards
|
||||
2. **Autenticação com JWT** - Token generation, validation, protection
|
||||
3. **Integração Supabase** - Client setup, user creation
|
||||
4. **Validação de DTOs** - class-validator, class-transformer
|
||||
5. **Decoradores** - @Controller, @UseGuards, @CurrentUser
|
||||
6. **ConfigModule** - Gerenciamento de variáveis de ambiente com Joi
|
||||
7. **Arquitetura em camadas** - Separação de responsabilidades
|
||||
**Sessão 1 - Backend Core**:
|
||||
1. Estrutura NestJS - Módulos, Controllers, Services, Guards
|
||||
2. Autenticação com JWT - Token generation, validation, protection
|
||||
3. Integração Supabase - Client setup, user creation, queries
|
||||
4. Validação de DTOs - class-validator, class-transformer
|
||||
5. Decoradores - @Controller, @UseGuards, @CurrentUser
|
||||
6. ConfigModule - Gerenciamento de variáveis com Joi
|
||||
7. Arquitetura em camadas - Separação de responsabilidades
|
||||
8. **NOVO**: CRUD com Supabase - Create, Read, Update, Delete
|
||||
9. **NOVO**: Query Filters - Filtros dinâmicos, ordenação
|
||||
10. **NOVO**: Row Level Security - Isolamento de dados por usuário
|
||||
11. **NOVO**: PostgreSQL Triggers - Atualização automática de timestamps
|
||||
12. **NOVO**: Database Indexing - Performance optimization
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Próximas Sessões Planejadas
|
||||
|
||||
1. **Hoje**: Implementar Módulo de Tarefas (Passo 1.3)
|
||||
2. **Hoje/Amanhã**: RLS no Supabase (Passo 1.4)
|
||||
3. **Amanhã**: Dockerfile (Passo 1.6)
|
||||
4. **Depois**: Frontend Next.js (Fase 2)
|
||||
1. **Hoje**:
|
||||
- ✅ Implementar Módulo de Tarefas (Passo 1.3)
|
||||
- ✅ Preparar RLS Supabase (Passo 1.4)
|
||||
- ➡️ Executar SQL no Supabase (MANUAL)
|
||||
- ➡️ Testar isolamento RLS
|
||||
|
||||
2. **Depois**:
|
||||
- Criar Dockerfile (Passo 1.6)
|
||||
- Iniciar Frontend Next.js (Fase 2)
|
||||
|
||||
---
|
||||
|
||||
**Status Final**: Backend 50% completo e pronto para integração com frontend! 🎉
|
||||
**Status Final**: Backend 70% completo com Tasks CRUD + RLS docs pronto! 🎉
|
||||
**Ação Necessária**: Execute o SQL script no Supabase para completar RLS (5%)
|
||||
|
||||
Reference in New Issue
Block a user