# Documentação do Projeto Photum - Sessão de Desenvolvimento Esta documentação resume todo o trabalho realizado durante a sessão atual de desenvolvimento, focada na implementação do Backend e ajustes no Frontend para o sistema Photum. ## 1. Visão Geral O objetivo principal foi fortalecer o backend em Go, implementar autenticação segura, e criar as estruturas para gerenciamento de FOT (Formandos, Organização, Turma) e Agenda de Eventos. ## 2. Implementações no Backend (Go + PostgreSQL) ### 2.1. Sistema de Autenticação e Usuários - **JWT & Refresh Tokens**: Implementação de autenticação baseada em tokens JWT curta duração e Refresh Tokens seguros. - **Hierarquia de Permissões (RBAC)**: Definição de roles padronizadas: ROLES Backend (Strings no Banco de Dados): admin ⮕ Mapeado para SUPERADMIN empresa ⮕ Mapeado para BUSINESS_OWNER cliente ⮕ Mapeado para EVENT_OWNER profissional ⮕ Mapeado para PHOTOGRAPHER admin@photum.com -> SUPERADMIN empresa@photum.com -> BUSINESS_OWNER foto@photum.com -> PHOTOGRAPHER - **Fluxo de Aprovação**: - Usuários se registram com status `ativo=false`. - Admin lista usuários pendentes (`/admin/users/pending`). - Admin aprova e define a Role (`/admin/users/:id/approve` e `/admin/users/:id/role`). - Bloqueio de login para usuários inativos. - **Dados do Usuário**: Adição de campos `Nome`, `Telefone` e `Empresa` no registro e listagens. ### 2.2. Tabelas Auxiliares (CRUDs) Criadas tabelas, Services e Handlers para as entidades básicas do sistema: - `cursos` - `empresas` - `anos_formaturas` - `tipos_eventos` (incluindo tabela de preços por função) - `tipos_servicos` - `funcoes_profissionais` ### 2.3. Módulo Cadastro FOT Responsável por vincular Turmas a Empresas e Instituições. - **Tabela**: `cadastro_fot` (Campos: `fot`, `empresa_id`, `curso_id`, `ano_formatura_id`, `instituicao`, `observacoes`, etc.). - **Backend**: - Endpoint `POST /api/cadastro-fot`: Criação com verificação de FOT duplicado. - Endpoint `GET /api/cadastro-fot`: Listagem com _joins_ para trazer nomes de Empresa, Curso, etc. - **Integração**: Conectado ao `CourseManagement.tsx` no frontend. ### 2.4. Módulo Agenda Responsável pelo agendamento de eventos vinculados a um FOT. - **Tabela**: `agenda` criada com uma estrutura normalizada, mas com campos específicos de evento. - Vinculada a `cadastro_fot` via `fot_id`. - Campos de dados do evento: `data_evento`, `local_evento`, `horario`, etc. - Campos de quantitativos: `qtd_formandos`, `qtd_fotografos`, `qtd_recepcionistas`, etc. - Campos de controle: `status_profissionais`, `foto_faltante`, `pre_venda`, etc. - **Backend**: - Arquivos gerados via SQLC (`internal/db/generated/agenda.sql.go`). - Service (`internal/agenda/service.go`) e Handler (`internal/agenda/handler.go`) implementados. - Rotas registradas em `cmd/api/main.go` sob `/api/agenda`. ### 2.5. Decisões Técnicas Backend - **Framework**: Gin Gonic. - **Database**: PostgreSQL com driver `pgx/v5`. - **Geração de Código**: Utilização do `sqlc` para gerar código Go type-safe a partir de queries SQL puras. - **Estrutura**: Padrão `internal/domain` (Service/Handler/Repository isolados). ## 3. Implementações no Frontend (React/Next.js) ### 3.1. Autenticação e Sessão - **AuthContext**: Melhoria na persistência de sessão. O frontend valida o token ao carregar e mantêm o usuário logado. - **Logout**: Implementada função de logout que chama o backend e limpa o estado local. - **UserApproval**: Interface para aprovação de usuários pendentes, exibindo Nome, E-mail e Empresa. ### 3.2. Gerenciamento de FOT (`CourseManagement.tsx`) - **Listagem**: Atualizada para consumir `/api/cadastro-fot` em vez de dados mockados. - **Formulário de Criação (`FotForm.tsx`)**: - Modal para criar novo FOT. - Dropdowns (Selects) conectados dinamicamente às APIs `/api/empresas`, `/api/cursos`, `/api/anos-formaturas`. - Validação e envio dos dados para o backend. ### 3.3. API Service - **`apiService.ts`**: Centralização das chamadas HTTP. Adicionadas funções para buscar cursos, anos de formatura, criar FOT, etc. ## 4. Próximos Passos Sugeridos 1. **Frontend Agenda**: Criar a interface para visualizar e editar a Agenda (`Calendar` ou `List View`), consumindo os endpoints `/api/agenda` já criados. 2. **Validações Avançadas**: Implementar regras de negócio mais complexas no backend (ex: conflito de horários). 3. **Relatórios**: Gerar PDFs ou Excels baseados nos dados de FOT e Agenda.