photum/project_documentation.md
NANDO9322 a1a4d0a5d1 feat(backend): implementa módulo Agenda com lógica automática de status
- Cria tabela 'agenda' com FKs normalizadas e colunas específicas de evento
- Gera operações CRUD via SQLC para Agenda
- Implementa Service e Handler da Agenda
- Adiciona cálculo automático de 'status_profissionais' (OK/FALTA/ERRO) baseado na contagem de faltantes
- Registra rotas da Agenda em /api/agenda
- Atualiza documentação Swagger
- Corrige caminhos de importação e tipagem UUID no novo serviço
2025-12-15 18:49:59 -03:00

4.5 KiB

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.