Skip to content

Commit 7e7f416

Browse files
fix(prod): resolve login em producao, remove urls localhost hardcoded e configura migracao/seed automaticos
1 parent ea74a26 commit 7e7f416

14 files changed

Lines changed: 438 additions & 26 deletions

File tree

.github/workflows/deploy.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@ jobs:
4343
tags: |
4444
${{ env.IMAGE_PREFIX }}/web:latest
4545
${{ env.IMAGE_PREFIX }}/web:${{ github.sha }}
46+
build-args: |
47+
NEXT_PUBLIC_API_URL=http://164.152.247.168/api
48+
NEXT_PUBLIC_WS_URL=http://164.152.247.168
4649
cache-from: type=gha,scope=web
4750
cache-to: type=gha,mode=max,scope=web
4851

CODEBASE.md

Lines changed: 184 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,184 @@
1+
# CODEBASE.md — AppCondomínio
2+
3+
> Mapa de dependências de arquivos do projeto.
4+
> Lido pelo agente antes de modificar qualquer arquivo para garantir que todos os afetados sejam atualizados juntos.
5+
6+
---
7+
8+
## 🗺️ Mapa de Dependências
9+
10+
### Frontend (apps/web)
11+
12+
#### Autenticação
13+
| Arquivo | Depende de | Afetados se modificado |
14+
|---------|-----------|----------------------|
15+
| `apps/web/src/app/login/page.tsx` | `hooks/useAuth.ts` | Nenhum |
16+
| `apps/web/src/hooks/useAuth.ts` | `app/login/page.tsx` | Todas as páginas protegidas |
17+
18+
#### Páginas
19+
| Arquivo | Depende de | Afetados se modificado |
20+
|---------|-----------|----------------------|
21+
| `apps/web/src/app/moradores/page.tsx` | `data/mockData.ts`, `types/index.ts`, `/api/auth/register`, `/api/support/search` | Nenhum |
22+
| `apps/web/src/app/perfil/page.tsx` | `data/mockData.ts` | Nenhum |
23+
| `apps/web/src/app/portaria/page.tsx` | `data/mockData.ts`, `types/index.ts` | Nenhum |
24+
| `apps/web/src/app/suporte/page.tsx` | `/api/support/*` | Nenhum |
25+
| `apps/web/src/app/dashboard/page.tsx` | `data/mockData.ts` | Nenhum |
26+
27+
#### Dados e Tipos
28+
| Arquivo | Depende de | Afetados se modificado |
29+
|---------|-----------|----------------------|
30+
| `apps/web/src/data/mockData.ts` | Nenhum | Todas as páginas que o importam |
31+
| `apps/web/src/types/index.ts` | Nenhum | `moradores/page.tsx`, `portaria/page.tsx`, `visitantes/page.tsx` |
32+
33+
#### Layout e Global
34+
| Arquivo | Depende de | Afetados se modificado |
35+
|---------|-----------|----------------------|
36+
| `apps/web/src/app/layout.tsx` | `globals.css` | Todas as páginas |
37+
| `apps/web/src/app/globals.css` | Nenhum | Toda a aplicação |
38+
39+
---
40+
41+
### Backend (apps/backend)
42+
43+
#### Módulos
44+
| Arquivo | Depende de | Afetados se modificado |
45+
|---------|-----------|----------------------|
46+
| `apps/backend/src/app.module.ts` | `AuthModule`, `SupportModule`, `PrismaModule`, `ThrottlerModule` | Toda a aplicação |
47+
| `apps/backend/src/main.ts` | `app.module.ts`, `HttpExceptionFilter` | Toda a API |
48+
49+
#### Auth
50+
| Arquivo | Depende de | Afetados se modificado |
51+
|---------|-----------|----------------------|
52+
| `apps/backend/src/auth/auth.module.ts` | `AuthService`, `AuthController`, `PrismaModule` | `app.module.ts` |
53+
| `apps/backend/src/auth/auth.service.ts` | `PrismaService`, `bcrypt`, `dto/login.dto.ts`, `dto/register.dto.ts` | `auth.controller.ts` |
54+
| `apps/backend/src/auth/auth.controller.ts` | `AuthService` | Rotas `/api/auth/*` |
55+
| `apps/backend/src/auth/dto/login.dto.ts` | `class-validator` | `auth.service.ts` |
56+
| `apps/backend/src/auth/dto/register.dto.ts` | `class-validator` | `auth.service.ts` |
57+
58+
#### Support
59+
| Arquivo | Depende de | Afetados se modificado |
60+
|---------|-----------|----------------------|
61+
| `apps/backend/src/support/support.module.ts` | `SupportService`, `SupportController`, `PrismaModule` | `app.module.ts` |
62+
| `apps/backend/src/support/support.service.ts` | `PrismaService` | `support.controller.ts` |
63+
| `apps/backend/src/support/support.controller.ts` | `SupportService` | Rotas `/api/support/*` |
64+
65+
#### Infraestrutura
66+
| Arquivo | Depende de | Afetados se modificado |
67+
|---------|-----------|----------------------|
68+
| `apps/backend/src/prisma/prisma.service.ts` | `@prisma/client`, `PrismaPg`, `pg` | Todos os services que usam Prisma |
69+
| `apps/backend/src/prisma/prisma.module.ts` | `PrismaService` | `auth.module.ts`, `support.module.ts` |
70+
| `apps/backend/src/common/filters/http-exception.filter.ts` | `@nestjs/common` | `main.ts` |
71+
72+
---
73+
74+
## 🗄️ Schema Prisma (PostgreSQL)
75+
76+
```prisma
77+
model User {
78+
id String @id @default(uuid())
79+
email String @unique
80+
name String
81+
password String // bcrypt hash
82+
role String @default("resident") // "admin" | "resident" | "operator"
83+
createdAt DateTime @default(now())
84+
updatedAt DateTime @updatedAt
85+
}
86+
87+
model SupportTicket {
88+
id String @id @default(uuid())
89+
title String
90+
description String
91+
status String @default("open")
92+
priority String @default("medium")
93+
userId String?
94+
createdAt DateTime @default(now())
95+
updatedAt DateTime @updatedAt
96+
}
97+
```
98+
99+
> ⚠️ Ao modificar o schema, **sempre** rodar `prisma migrate dev` e atualizar os services afetados.
100+
101+
---
102+
103+
## 🌐 Endpoints de API
104+
105+
| Método | Rota | Serviço | Validação |
106+
|--------|------|---------|-----------|
107+
| `POST` | `/api/auth/register` | `AuthService.register` | `RegisterDto` (class-validator) |
108+
| `POST` | `/api/auth/login` | `AuthService.login` | `LoginDto` (class-validator) |
109+
| `GET` | `/api/support/search?q=` | `SupportService.search` | Parametrizado (Prisma) |
110+
| `POST` | `/api/support/tickets` | `SupportService.createTicket` | Body validation |
111+
112+
---
113+
114+
## 🔗 Convenções de Código
115+
116+
### Frontend (Next.js + Tailwind)
117+
- **Componentes**: `"use client"` apenas quando necessário
118+
- **Estilo**: Tailwind utility classes + CSS variables (`--font-manrope`)
119+
- **Estado**: `useState` + `useEffect` (sem biblioteca externa de estado)
120+
- **Fetch**: `fetch()` nativo com `encodeURIComponent()` para query params
121+
122+
### Backend (NestJS)
123+
- **Padrão**: Module → Controller → Service → Prisma
124+
- **DTOs**: `class-validator` decorators para validação
125+
- **Erros**: `HttpException` com mensagens genéricas (sem information disclosure)
126+
- **Banco**: Sempre usar Prisma parametrizado — **nunca** string interpolation em queries
127+
128+
### Segurança Obrigatória
129+
- Senhas: mínimo 8 chars, 1 maiúscula, 1 minúscula, 1 número, 1 especial (`@$!%*?&`)
130+
- Rate limiting: 10 req / 60s por IP
131+
- CORS: apenas `localhost:3000` em dev
132+
- Secrets: nunca hardcoded — usar `.env`
133+
134+
---
135+
136+
## 📦 Dependências Principais
137+
138+
### Frontend
139+
```json
140+
{
141+
"next": "^15",
142+
"react": "^19",
143+
"tailwindcss": "^4",
144+
"lucide-react": "latest"
145+
}
146+
```
147+
148+
### Backend
149+
```json
150+
{
151+
"@nestjs/core": "^11",
152+
"@nestjs/throttler": "^6",
153+
"@prisma/client": "^7",
154+
"bcrypt": "^5",
155+
"helmet": "^8",
156+
"class-validator": "^0.14",
157+
"pg": "^8"
158+
}
159+
```
160+
161+
---
162+
163+
## 🐳 Docker Compose
164+
165+
| Serviço | Porta | Descrição |
166+
|---------|-------|-----------|
167+
| `web` | `3000` | Next.js frontend |
168+
| `backend` | `3001` | NestJS API |
169+
| `postgres` | `5432` | PostgreSQL 16 |
170+
171+
```bash
172+
# Iniciar ambiente local
173+
npm run dev:local
174+
175+
# Ver logs
176+
npm run dev:local:logs
177+
178+
# Parar
179+
npm run dev:local:down
180+
```
181+
182+
---
183+
184+
> Última atualização: 2026-05-24

GEMINI.md

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
---
2+
trigger: always_on
3+
---
4+
5+
# GEMINI.md — AppCondomínio Docker
6+
7+
> Arquivo de configuração do Antigravity Kit para este projeto.
8+
> Lido automaticamente em cada sessão de desenvolvimento.
9+
10+
---
11+
12+
## 🚀 BOOTSTRAP OBRIGATÓRIO (LEIA PRIMEIRO)
13+
14+
> 🔴 **MANDATORY:** Ao iniciar qualquer sessão neste projeto, você DEVE:
15+
> 1. Ler `.agent/ARCHITECTURE.md` para entender os agentes, skills e scripts disponíveis
16+
> 2. Ler `.agent/rules/GEMINI.md` para carregar todas as regras do sistema
17+
> 3. Carregar `CODEBASE.md` para entender as dependências de arquivos deste projeto
18+
19+
```
20+
SESSION START PROTOCOL:
21+
1. read(.agent/ARCHITECTURE.md)
22+
2. read(.agent/rules/GEMINI.md) ← Regras completas aqui
23+
3. read(CODEBASE.md) ← Mapa de dependências
24+
```
25+
26+
---
27+
28+
## 📌 PROJETO: AppCondomínio
29+
30+
| Campo | Valor |
31+
|---------------|----------------------------------------|
32+
| **Nome** | AppCondomínio — Concierge OS |
33+
| **Stack** | Next.js 15 (frontend) + NestJS (backend) + PostgreSQL |
34+
| **Monorepo** | `apps/web` (Next.js) + `apps/backend` (NestJS) |
35+
| **Infra** | Docker Compose (dev) + Docker Compose Prod |
36+
| **ORM** | Prisma v7 com `PrismaPg` adapter + `pg` pool |
37+
| **Auth** | bcrypt + JWT (NestJS AuthModule) |
38+
| **Segurança** | Helmet, CORS, ThrottlerGuard, ValidationPipe |
39+
40+
---
41+
42+
## 🗂️ ESTRUTURA RÁPIDA
43+
44+
```
45+
appcondominio-docker/
46+
├── apps/
47+
│ ├── web/ # Next.js 15 App Router
48+
│ │ └── src/app/
49+
│ │ ├── login/ # Autenticação real (bcrypt)
50+
│ │ ├── dashboard/ # Painel principal
51+
│ │ ├── moradores/ # CRUD de moradores (POST /api/auth/register)
52+
│ │ ├── portaria/ # Controle de acesso
53+
│ │ ├── visitantes/ # Gestão de visitas
54+
│ │ ├── autorizacao/ # Autorizações de entrada
55+
│ │ ├── suporte/ # Tickets de suporte
56+
│ │ ├── perfil/ # Perfil do operador (indicador de força de senha)
57+
│ │ └── ...
58+
│ └── backend/ # NestJS API
59+
│ └── src/
60+
│ ├── auth/ # AuthModule (login + register com bcrypt)
61+
│ ├── support/ # SupportModule (busca segura parametrizada)
62+
│ ├── prisma/ # PrismaService (PrismaPg adapter)
63+
│ └── common/
64+
│ └── filters/ # HttpExceptionFilter
65+
├── .agent/ # Antigravity Kit
66+
│ ├── agents/ # 20 agentes especialistas
67+
│ ├── skills/ # 37 skills modulares
68+
│ ├── scripts/ # checklist.py, verify_all.py
69+
│ └── rules/GEMINI.md # Regras completas do sistema
70+
├── GEMINI.md # ← Este arquivo (bootstrap)
71+
└── CODEBASE.md # Mapa de dependências de arquivos
72+
```
73+
74+
---
75+
76+
## 🤖 AGENTES ATIVOS NESTE PROJETO
77+
78+
| Agente | Quando usar |
79+
|------------------------|-------------------------------------------------|
80+
| `frontend-specialist` | Componentes Next.js, UI/UX, Tailwind |
81+
| `backend-specialist` | NestJS, APIs REST, guards, middlewares |
82+
| `database-architect` | Prisma schema, migrations, queries |
83+
| `security-auditor` | Auth, bcrypt, rate limiting, OWASP |
84+
| `debugger` | Erros 401, 500, crashes, comportamento errado |
85+
| `devops-engineer` | Docker Compose, variáveis de ambiente, deploy |
86+
| `orchestrator` | Tarefas multi-domínio (ex: nova feature completa) |
87+
88+
---
89+
90+
## ⚡ COMANDOS DISPONÍVEIS
91+
92+
| Slash Command | O que faz |
93+
|------------------|-------------------------------------------|
94+
| `/brainstorm` | Descoberta socrática antes de implementar |
95+
| `/create` | Criar nova feature completa |
96+
| `/debug` | Modo debug sistemático (4 fases) |
97+
| `/deploy` | Checklist de deploy |
98+
| `/enhance` | Melhorar funcionalidade existente |
99+
| `/plan` | Criar plano de tarefa detalhado |
100+
| `/preview` | Gerenciar servidor de preview local |
101+
| `/status` | Status do projeto e tarefas |
102+
| `/test` | Gerar e rodar testes |
103+
| `/ui-ux-pro-max` | Design UI premium (50 estilos, 21 paletas)|
104+
105+
---
106+
107+
## 🔒 CONTEXTO DE SEGURANÇA ATUAL
108+
109+
O projeto passou por auditoria de segurança. Implementações ativas:
110+
111+
-**Rate Limiting**`@nestjs/throttler` (10 req/60s)
112+
-**Helmet** — headers HTTP de segurança
113+
-**CORS** — configurado para `localhost:3000`
114+
-**ValidationPipe** — sanitização de inputs
115+
-**bcrypt** — hashing de senhas (rounds: 10)
116+
-**Prisma parametrizado** — sem SQL injection
117+
-**HttpExceptionFilter** — sem information disclosure
118+
-**Indicador de força de senha** — em `/perfil`
119+
120+
**Credenciais de desenvolvimento:**
121+
- Email: `admin@obsidian.com`
122+
- Senha: `Admin@123`
123+
124+
---
125+
126+
## 📋 CHECKLIST FINAL
127+
128+
Para validar o projeto antes de deploy:
129+
130+
```bash
131+
# Validação rápida de desenvolvimento
132+
python .agent/scripts/checklist.py .
133+
134+
# Validação completa com performance (requer app rodando)
135+
python .agent/scripts/checklist.py . --url http://localhost:3000
136+
```
137+
138+
---
139+
140+
> Todas as regras detalhadas de comportamento do agente estão em `.agent/rules/GEMINI.md`

apps/backend/Dockerfile

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,13 @@ RUN addgroup --system --gid 1001 nodejs
2828
RUN adduser --system --uid 1001 nestjs
2929

3030
COPY --from=builder --chown=nestjs:nodejs /app/dist ./dist
31-
COPY --from=builder /app/node_modules ./node_modules
32-
COPY --from=builder /app/package.json ./package.json
31+
COPY --from=builder --chown=nestjs:nodejs /app/node_modules ./node_modules
32+
COPY --from=builder --chown=nestjs:nodejs /app/package.json ./package.json
33+
COPY --from=builder --chown=nestjs:nodejs /app/prisma ./prisma
34+
COPY --from=builder --chown=nestjs:nodejs /app/prisma.config.ts ./prisma.config.ts
3335

3436
USER nestjs
3537

3638
EXPOSE 3001
3739

38-
CMD ["node", "dist/main.js"]
40+
CMD ["sh", "-c", "npx prisma migrate deploy && npx prisma db seed && node dist/main.js"]

apps/backend/package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,5 +30,8 @@
3030
"prisma": "^7.8.0",
3131
"ts-node-dev": "^2.0.0",
3232
"typescript": "^5.7.2"
33+
},
34+
"prisma": {
35+
"seed": "node prisma/seed.js"
3336
}
3437
}

apps/backend/prisma.config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ export default defineConfig({
77
schema: "prisma/schema.prisma",
88
migrations: {
99
path: "prisma/migrations",
10+
seed: "node prisma/seed.js",
1011
},
1112
datasource: {
1213
url: process.env["DATABASE_URL"],

0 commit comments

Comments
 (0)