Plataforma completa de gestão de tarefas e projetos — inspirada no monday.com
Admin Tasks é um sistema web para gerenciar workspaces, membros, convites e usuários com autenticação segura via JWT. A plataforma oferece controle de acesso baseado em roles (OWNER / ADMIN / MEMBER), fluxo de convites por e-mail, rotação de tokens de sessão e uma interface moderna e responsiva.
- Registro de conta com validação de e-mail único
- Login com geração de access token (15 min) + refresh token (7 dias)
- Rotação automática de refresh token (detecção de replay attack)
- Redefinição de senha por link enviado por e-mail
- Logout com revogação imediata dos tokens
- Proteção contra enumeração de usuários no fluxo de "esqueci a senha"
- Criação de múltiplos workspaces por usuário
- Cada workspace tem roles distintas: OWNER, ADMIN, MEMBER
- Listagem somente dos workspaces em que o usuário é membro
- Edição pelo OWNER ou ADMIN; exclusão exclusiva do OWNER (soft delete)
- Transferência de ownership com transação atômica
- Listagem de membros do workspace
- Atualização de role (ADMIN pode promover/rebaixar MEMBERs; transferência de OWNER requer o OWNER atual)
- Remoção de membro (OWNER não pode ser removido; use transferência)
- "Sair do workspace" sem precisar ser removido por outro (OWNER deve transferir antes)
- Envio de convite por e-mail para qualquer endereço
- Verificação de duplicata: bloqueia convite se já existir membro ou convite pendente
- Convites com prazo de 7 dias e expiração automática
- Reenvio e cancelamento de convites pendentes
- Aceitação via token único: cria membro automaticamente (ou redireciona para registro se o e-mail não tiver conta)
- Visualização e edição de nome e avatar
- Troca de senha com revogação de todos os refresh tokens ativos
| Camada | Tecnologia |
|---|---|
| Backend | NestJS 11 + Prisma 6 ORM + PostgreSQL 16 |
| Frontend | Next.js 14 (App Router) + Bootstrap 5.3 + MUI 5 |
| Auth | JWT + Passport.js (backend) · NextAuth.js 4 (frontend) |
| Infra | Docker + Docker Compose + Portainer CE |
| Testes | Jest + ts-jest (backend) |
| Validação | class-validator + zod |
admin-tasks/
├── backend/ # API NestJS
│ ├── src/
│ │ ├── modules/
│ │ │ ├── auth/ # Registro, login, tokens, reset de senha
│ │ │ ├── users/ # Perfil, troca de senha
│ │ │ ├── workspaces/ # CRUD de workspaces
│ │ │ ├── members/ # Gerenciamento de membros
│ │ │ ├── invites/ # Convites por e-mail
│ │ │ ├── mail/ # Envio de e-mails (console em dev)
│ │ │ └── prisma/ # PrismaService injetável
│ │ └── common/ # Guards, decorators, interceptors, pipes
│ └── prisma/
│ ├── schema.prisma # Modelos: User, Workspace, Member, Invite, Token
│ ├── migrations/ # Migrações versionadas
│ └── seed.ts # Seed do usuário administrador padrão
│
├── frontend/ # Interface Next.js
│ ├── app/ # App Router (layouts + páginas)
│ │ ├── (auth)/ # /login, /register
│ │ └── (dashboard)/ # /workspaces, /workspaces/[id], /profile
│ ├── components/ # Componentes reutilizáveis
│ ├── hooks/ # Custom hooks (TanStack Query)
│ └── lib/
│ ├── api/ # Camada de chamadas HTTP (Axios)
│ └── auth.ts # Configuração NextAuth
│
├── docs/
│ └── tests/ # Relatórios de testes
│
├── docker-compose.yml # Orquestra: Portainer + DB + Backend + Frontend
└── .env.example # Variáveis de ambiente necessárias
User ─┬─► RefreshToken
├─► PasswordResetToken
├─► Workspace (owner)
├─► WorkspaceMember ◄─► Workspace
└─► WorkspaceInvite (sender)
- Senhas armazenadas com bcrypt (salt rounds configurável)
- Tokens JWT assinados com segredos separados (access / refresh)
- Rotação de refresh token com detecção de replay attack
- Validação e sanitização de todos os inputs via DTOs (
class-validator) - Rate limiting nas rotas públicas (
@nestjs/throttler) - CORS configurado explicitamente (sem
*em produção) - Soft delete: dados do usuário nunca são apagados fisicamente
- Headers de segurança via
helmet
| Suíte | Cobertura |
|---|---|
auth.service.spec.ts |
register, login, refreshTokens, forgotPassword, resetPassword, logout |
users.service.spec.ts |
getProfile, updateProfile, changePassword |
workspaces.service.spec.ts |
create, findAll, findOne, update, remove |
members.service.spec.ts |
findAll, updateRole, remove, leave |
invites.service.spec.ts |
create, findAll, resend, cancel, accept |
Tests: 58 passed, 58 total (5 suítes)
Consulte o GUIA_DE_USO.md para instruções completas de como executar o sistema e configurar o usuário administrador padrão.