Create local agents configuration, rules, and microtecflix development skill
Build and Deploy (Gitea) / build-and-deploy (push) Successful in 1m0s
Details
Build and Deploy (Gitea) / build-and-deploy (push) Successful in 1m0s
Details
This commit is contained in:
parent
6f7e7fbcc6
commit
772a308667
|
|
@ -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.
|
||||||
|
|
@ -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 <container-id> 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
|
||||||
|
<span className="text-[#E50914]">{brandName}</span>
|
||||||
|
<span className="text-white">FLIX</span>
|
||||||
|
```
|
||||||
|
|
||||||
|
## 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.
|
||||||
16
memory.md
16
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.
|
* 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).
|
* 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.
|
* 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`):
|
### Funcionalidades do Administrador (`AdminApp.tsx` / `AdminDashboard.tsx`):
|
||||||
* Dashboard com métricas financeiras (MRR, Receita Total, Taxa de Inadimplência, Alunos Ativos).
|
* **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.
|
* CRUD de Cursos, Módulos e Aulas.
|
||||||
* Gestão de Alunos e alteração manual de status de assinatura (`ACTIVE`, `OVERDUE`, `CANCELED`, `TRIAL`).
|
* 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.
|
* 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)
|
## 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`).
|
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.
|
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.
|
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.
|
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.
|
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).
|
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.
|
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
|
## 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.
|
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.
|
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).
|
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).
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue