# Portal CEEC - Especificacao Tecnica

## Visao Geral
O Portal CEEC e uma plataforma web para gestao academica e administrativa com tres perfis:
- `ADMINISTRADOR`
- `PROFESSOR`
- `ALUNO`

A aplicacao integra cursos, matriculas, progresso, documentos, certificados, financeiro, suporte, forum, notificacoes, email e backups.

## Arquitetura
- Frontend: React + TypeScript + Vite.
- Backend: Node.js + Express + TypeScript.
- Banco: MySQL com Prisma ORM.
- Auth: JWT (`accessToken` + `refreshToken`).
- Notificacoes: internas + email SMTP por evento.

## Estrutura Principal
- `src/`: frontend.
- `api/src/`: backend.
- `api/prisma/`: schema e migrations.
- `uploads/`: arquivos enviados.
- `docs/`: documentacao oficial.

## Modulos de Negocio
- Auth e sessao.
- Gestao de usuarios e moderacao.
- Cursos, modulos, materiais e progresso.
- Matriculas e controle de acesso/documentacao.
- Certificados.
- Financeiro com comissao/repasse/contestacao.
- Suporte e forum.
- Notificacoes e configuracao de email.
- Monitoramento e backups administrativos.

## Configuracao de Ambiente
### Frontend
Arquivo `.env.example`:
- `VITE_API_URL=http://localhost:3333/api`

### Backend
Variaveis obrigatorias:
- `DATABASE_URL`
- `JWT_SECRET`
- `PORT`

Variaveis opcionais:
- `JWT_EXPIRES_IN`
- `JWT_REFRESH_SECRET`
- `JWT_REFRESH_EXPIRES_IN`
- `DEFAULT_ADMIN_EMAIL`
- `DEFAULT_ADMIN_PASSWORD`
- `DEFAULT_ADMIN_FIRST_NAME`
- `DEFAULT_ADMIN_LAST_NAME`

## Scripts
### Frontend (raiz)
- `npm run dev`
- `npm run build`
- `npm run preview`

### Backend (`api/`)
- `npm run dev`
- `npm run build`
- `npm run start`
- `npm run prisma:generate`
- `npm run prisma:migrate`
- `npm run prisma:deploy`

## API (Resumo)
Base: `/api`

### Auth (`/auth`)
- `POST /register`
- `POST /login`
- `POST /refresh`
- `GET /me`

### Users (`/users`)
- `GET /`
- `POST /`
- `PATCH /me`
- `PATCH /:id`
- `POST /:id/moderate`
- `DELETE /:id`

### Courses (`/courses`)
- `GET /`
- `GET /:id`
- `POST /`
- `PATCH /:id`
- `DELETE /:id`
- `POST /:id/modules`
- `PATCH /:id/modules/:moduleId`
- `DELETE /:id/modules/:moduleId`
- `PATCH /:id/modules/:moduleId/progress`
- `PATCH /:id/enrollments/:alunoId/access`
- `GET /professor/submissions/complementary`
- `PATCH /professor/submissions/complementary/:progressId/review`
- `GET /certificates/requests`
- `PATCH /certificates/requests/:enrollmentId/review`
- `GET /student/certificates`
- `PATCH /:id/commission/respond`
- `PATCH /:id/commission/counter`
- `PATCH /:id/commission/counter/review`
- `PATCH /:id/approval/review`

### Finance (`/finance`)
- `GET /records`
- `POST /records`
- `PATCH /records/:id/status`
- `POST /records/:id/attachments`
- `POST /records/:id/proof`
- `PATCH /records/:id/commission/pay`
- `POST /records/:id/commission/contest`
- `PATCH /records/:id/commission/settlement/request`
- `POST /records/:id/commission/settlement/proof`
- `PATCH /records/:id/commission/settlement/block-course`

### Forum (`/forum`)
- `GET /topics`
- `POST /topics`
- `POST /topics/:id/replies`
- `PATCH /topics/:id/status`

### Materials (`/materials`)
- `GET /`
- `POST /`
- `DELETE /:id`

### Notifications (`/notifications`)
- `GET /`
- `POST /`
- `PATCH /:id`
- `DELETE /:id`
- `GET /email-settings`
- `PUT /email-settings`
- `POST /email-settings/test`

### Uploads (`/uploads`)
- `POST /`

### Support (`/support`)
- `GET /tickets`
- `POST /tickets`
- `POST /tickets/:id/messages`
- `PATCH /tickets/:id/status`
- `PATCH /tickets/:id/accept`
- `PATCH /tickets/:id/assign`

### Dashboard (`/dashboard`)
- `GET /student`
- `GET /professor`
- `GET /admin`
- `GET /admin/system-overview`

### Documents (`/documents`)
- `GET /requests`
- `POST /requests`
- `PATCH /requests/:id/review`

### Backups (`/backups`)
- `GET /`
- `POST /`
- `GET /:id/download`
- `POST /:id/restore`
- `DELETE /:id`

## Regras-Chave
- Aluno so visualiza cursos com matricula.
- Curso de professor passa por aprovacao admin.
- Documentacao e financeiro podem bloquear acesso.
- Certificado depende de revisao/aprovacao.
- Banimento bloqueia login/refresh/acesso.
- Notificacoes automaticas podem disparar email por evento.

## Fluxos
Veja `docs/fluxos.md` para diagramas de arquitetura e fluxos criticos.
