microtecflix/memory.md

71 lines
4.8 KiB
Markdown

# Contexto de Memória e Arquitetura - MicrotecFlix
Este arquivo registra o contexto de desenvolvimento, arquitetura, esquema de dados e regras de negócio da plataforma **MicrotecFlix**.
---
## 1. Visão Geral do Sistema
O **MicrotecFlix** é uma plataforma EAD / Streaming de cursos de informática e negócios baseada em assinaturas recorrentes com integração ao gateway de pagamentos Asaas.
### Funcionalidades do Aluno (`App.tsx`):
* Catálogo de Cursos (Windows 11, Word, Excel, PowerPoint).
* Player de Vídeo com aulas em streaming (YouTube ou links diretos MP4).
* Progresso de aula (porcentagem assistida e status de conclusão).
* Bloco de anotações por aula.
* 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.
### Funcionalidades do Administrador (`AdminApp.tsx`):
* Dashboard com métricas financeiras (MRR, Receita Total, Taxa de Inadimplência, Alunos Ativos).
* 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.
---
## 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`).
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.
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.
6. **`Progress`**: Histórico de progresso do aluno por aula (% assistida e `completed`).
7. **`Payment` (SubscriptionPayment)**: Histórico de faturas e cobranças registradas no gateway de pagamentos, linkado a usuários, cursos e planos.
8. **`WebhookLog`**: Registro auditável de webhooks recebidos do Asaas.
9. **`ModuleActivity` / `ModuleGrade`**: Questionários/Múltipla escolha e pontuações dos alunos, substituindo a antiga matriz JSON de atividades.
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.
---
## 3. Infraestrutura & Portainer / Swarm
* **Rede Traefik Public**: `network_public`
* **Rede Interna App-DB**: `microtecflix-net` (Overlay)
* **Containers na Stack**:
* `postgres-microtecflix` (Porta externa `5435:5432`)
* `minio-microtecflix` (Porta 9000 para API S3 e 9001 para Web Console)
* `microtecflix` (Porta interna `3000`, exposto via Traefik HTTPS)
* **Domínios Mapeados**:
* `estudo.microtecinformaticacurso.com.br` -> Aluno
* `admin-estudo.microtecinformaticacurso.com.br` -> Admin
* `s3-estudo.microtecinformaticacurso.com.br` -> Bucket S3 (API Público/Uploads)
* `minio-estudo.microtecinformaticacurso.com.br` -> Console de Gerenciamento MinIO
---
## 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`.
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).
5. **Deploy**: O arquivo `docker-stack.yml` deve ser atualizado sempre que novas variáveis de ambiente ou volumes forem necessários para a stack do Portainer.