# 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.