71 lines
4.8 KiB
Markdown
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.
|