diff --git a/.agents/AGENTS.md b/.agents/AGENTS.md new file mode 100644 index 0000000..cb49dea --- /dev/null +++ b/.agents/AGENTS.md @@ -0,0 +1,30 @@ +# MicrotecFlix - Regras do Agente (Workspace Rules) + +Este arquivo define as restrições comportamentais e as diretrizes arquiteturais específicas do MicrotecFlix que o agente deve sempre obedecer em futuras edições. + +--- + +## 1. Conexão com Banco de Dados +* **PostgreSQL Dedicado**: O banco de dados PostgreSQL roda em container isolado na porta **`5435:5432`** (evitando conflito com a porta padrão 5432 usada por outros bancos na VPS, como o do AgendaPRO). +* **Nunca use db.json**: Toda a persistência de dados foi migrada para o PostgreSQL. Não reintroduza o arquivo `db.json` nem funções locais como `loadDb()`. +* **Prisma Client**: Sempre que fizer modificações em `prisma/schema.prisma`, execute `npx prisma generate` localmente e garanta que `npx prisma db push` seja executado no ambiente do deploy para sincronizar o banco. + +--- + +## 2. Roteamento de Domínios & Portais +* **Roteamento no Root**: O arquivo `src/Root.tsx` realiza o roteamento com base no host: + * Subdomínio com `admin` (`admin-estudo.microtecinformaticacurso.com.br`) renderiza o `AdminApp.tsx`. + * Subdomínio padrão (`estudo.microtecinformaticacurso.com.br`) renderiza o `App.tsx` (Painel do Aluno). +* **Mantenha os layouts isolados**: Não misture imports do portal do aluno dentro do administrador e vice-versa. + +--- + +## 3. Customização SaaS (Branding) +* **Logomarca Dinâmica**: A logo deve renderizar o prefixo `brandName` em vermelho e a extensão `FLIX` em branco. O slogan abaixo da logo deve carregar de forma dinâmica do estado público de configurações (`SystemSettings`). +* **CNPJ e Endereço**: Exibir sempre os dados de CNPJ e Endereço legais retornados por `/api/settings` nos rodapés públicos. + +--- + +## 4. Segurança e Webhooks +* **Webhook Asaas**: A rota `/api/webhooks/asaas` exige validação do header `asaas-access-token`. Se for incorreto, retorne **HTTP 401** informando o token recebido vs o esperado para facilitar a depuração no painel do Asaas. +* **PCI-DSS**: Dados confidenciais de cartão (número completo, CVV) **nunca** devem ser persistidos no banco de dados. Use a tokenização da API do Asaas e grave apenas os últimos 4 dígitos e o token de cartão. diff --git a/.agents/skills/microtecflix/SKILL.md b/.agents/skills/microtecflix/SKILL.md new file mode 100644 index 0000000..0b896a6 --- /dev/null +++ b/.agents/skills/microtecflix/SKILL.md @@ -0,0 +1,40 @@ +--- +name: microtecflix +description: Assist in developing, refactoring, compiling, and deploying the MicrotecFlix course and subscription streaming portal. +--- + +# MicrotecFlix - Guia de Desenvolvimento de Baixo Consumo de Tokens + +Este guia contém as instruções essenciais de arquitetura e do banco de dados para realizar edições de forma rápida, segura e com o mínimo consumo de tokens do modelo Antigravity. + +## 1. Mapeamento de Diretórios Principais +- `server.ts`: Backend Express (Rotas, autenticação JWT, integrador Asaas, Evolution API/WhatsApp e logs de Webhook). +- `prisma/schema.prisma`: Esquema de dados PostgreSQL. +- `src/Root.tsx`: Ponto de entrada do roteador frontend (Roteia subdomínio admin vs portal do aluno). +- `src/App.tsx`: Portal do Aluno (Catálogo, player de vídeo, perfil e upload de avatar para MinIO S3). +- `src/AdminApp.tsx` / `src/components/AdminDashboard.tsx`: Painel Administrativo com o menu lateral estilizado do AgendaPRO. +- `src/components/AdminContentManager.tsx`: Gerenciador de Cursos, Módulos e Aulas. + +## 2. Banco de Dados & Prisma +O banco roda na porta `5435` do host da VPS. +Para adicionar campos ou tabelas: +1. Altere `prisma/schema.prisma`. +2. Rode `npx prisma generate` localmente para atualizar as tipagens no editor. +3. Commit e envie para o repositório. O CI/CD irá reconstruir a imagem Docker. +4. Execute `npx prisma db push` dentro do container em execução no servidor para sincronizar com o banco: + `ssh -i C:\Users\Sidney\id_oci_rsa ubuntu@150.230.87.131 "sudo docker exec npx prisma db push"` + +## 3. Customização do SaaS (Branding) +- Rota pública do backend: `/api/settings` +- Rota protegida por JWT Admin: `/api/admin/settings` +- Campos em `SystemSettings`: `brandName` (Prefix em vermelho), `brandSlogan`, `cnpj`, `address`, `enableBoleto`. +- Ao renderizar a logo no frontend: + ```tsx + {brandName} + FLIX + ``` + +## 4. Segurança e Gateway de Pagamentos +- Asaas webhook expects header `asaas-access-token`. Validate against `asaasWebhookSecret` database value. +- Do not log credit card PAN, CVV, or expiry dates in the database (PCI-DSS compliance). +- Always use `ErrorBoundary` wrapping for main DOM rendering to handle screen crashes caused by translation tools. diff --git a/memory.md b/memory.md index 971aa59..9e05e85 100644 --- a/memory.md +++ b/memory.md @@ -16,9 +16,13 @@ O **MicrotecFlix** é uma plataforma EAD / Streaming de cursos de informática e * Assinatura e checkout integrado via Pix, Boleto e Cartão de Crédito. * Perfil Dinâmico: Edição de dados pessoais (Nome, Data de Nascimento, WhatsApp). * Upload de Avatar: Integração com armazenamento S3 (MinIO) para hospedar fotos de perfil. +* Identidade Visual Customizada: Logomarca, slogan e rodapé legais (CNPJ e Endereço) atualizados dinamicamente com base nas configurações ativas do SaaS. -### Funcionalidades do Administrador (`AdminApp.tsx`): -* Dashboard com métricas financeiras (MRR, Receita Total, Taxa de Inadimplência, Alunos Ativos). +### Funcionalidades do Administrador (`AdminApp.tsx` / `AdminDashboard.tsx`): +* **Menu Lateral Responsivo (Estilo AgendaPRO)** dividido em seções: + * **VISÃO GERAL**: Dashboard com métricas financeiras (MRR, Receita Total, Taxa de Inadimplência, Alunos Ativos). + * **GESTÃO**: Assinantes, Grade de Cursos, Planos de Combos e Histórico de Pagamentos. + * **SISTEMA**: Configurações Asaas, Evolution API, Webhooks Asaas e Configuração do SaaS (onde se alteram o nome, slogan, CNPJ e endereço da plataforma). * CRUD de Cursos, Módulos e Aulas. * Gestão de Alunos e alteração manual de status de assinatura (`ACTIVE`, `OVERDUE`, `CANCELED`, `TRIAL`). * Visualização do histórico de Webhooks do Asaas. @@ -27,10 +31,10 @@ O **MicrotecFlix** é uma plataforma EAD / Streaming de cursos de informática e ## 2. Esquema de Entidades (`prisma/schema.prisma` / PostgreSQL) -Todo o sistema foi **100% migrado para o PostgreSQL** utilizando o **Prisma ORM**. O antigo arquivo `db.json` e a função genérica `loadDb()` foram completamente descartados e removidos da base de código backend (`server-prisma.ts`). +Todo o sistema foi **100% migrado para o PostgreSQL** utilizando o **Prisma ORM**. O antigo arquivo `db.json` e a função genérica `loadDb()` foram completamente descartados e removidos da base de código backend (`server.ts`). 1. **`User`**: Usuários da plataforma (`admin` ou `student`) com status de assinatura (`ACTIVE`, `OVERDUE`, `CANCELED`, `TRIAL`). -2. **`Course`**: Cursos cadastrados com título, descrição, thumbnail, categoria e preço avulso/bloqueio. +2. **`Course`**: Cursos cadastrados com título, descrição, thumbnail, categoria, certificadoMode (`FULL_COURSE` ou `PER_MODULE`) e preço avulso/bloqueio. 3. **`Module`**: Módulos organizados sequencialmente por curso. 4. **`Lesson`**: Aulas vinculadas ao módulo com URL de vídeo (`youtube` ou `direct`) e conteúdo complementar. 5. **`Note`**: Anotações pessoais feitas pelos alunos por aula. @@ -41,7 +45,7 @@ Todo o sistema foi **100% migrado para o PostgreSQL** utilizando o **Prisma ORM* 10. **`Certificate`**: Certificados ganhos pelos alunos (por Módulo ou por Curso) gerados automaticamente. 11. **`Plan`**: Planos de assinatura (Combos vitálcios, Assinaturas Mensais, Anuais). 12. **`Notification`**: Alertas e avisos aos usuários, gerenciados em tabela relacional em tempo real. -13. **`SystemSettings`**: Configurações dinâmicas do sistema, chaves do Asaas e texto de ajuda. +13. **`SystemSettings`**: Configurações dinâmicas do sistema, chaves do Asaas, texto de ajuda, Evolution API, marca SaaS (`brandName` em vermelho, `brandSlogan`, `cnpj`, `address`) e opção de habilitar/desabilitar boleto bancário (`enableBoleto`). --- @@ -63,7 +67,7 @@ Todo o sistema foi **100% migrado para o PostgreSQL** utilizando o **Prisma ORM* ## 4. Diretrizes para Futuras Edições -1. **Preservação da Autenticação JWT**: O token JWT é armazenado em `localStorage` sob a chave `devflix_token`. Qualquer nova rota de API restrita deve utilizar o middleware `authenticateToken`. +1. **Preservação da Autenticação JWT**: O token JWT é armazenado em `localStorage` sob a chave `devflix_token` (alunos) e `devflix_admin_token` (administradores). Qualquer nova rota de API restrita deve utilizar o middleware `authenticateToken`. 2. **Segurança do Webhook (Asaas)**: A rota `/api/webhooks/asaas` exige validação do header `asaas-access-token` contra a chave `asaasWebhookSecret` salva nas Configurações Globais. Caso as chaves divirjam, a requisição sofre rejeição com **HTTP 401 Unauthorized** e um payload detalhando qual token foi recebido e qual era o esperado. 3. **Liberação de Cursos/Assinaturas**: Webhooks com status de confirmação (`PAYMENT_CONFIRMED`, `PAYMENT_RECEIVED`) atualizam automaticamente o status da assinatura ou liberam o curso no array `unlockedCourses` se a validação de segurança passar. 4. **Isolamento de Banco de Dados**: O container `postgres-microtecflix` roda na porta 5435 do host para garantir que não haja conflitos de porta com o banco PostgreSQL de outros projetos (ex: AgendaPRO na porta 5432).