385 lines
9.5 KiB
Markdown
385 lines
9.5 KiB
Markdown
# Frontend - Photum Formaturas
|
|
|
|
Sistema de gerenciamento de eventos e formaturas desenvolvido com React, TypeScript e Vite.
|
|
|
|
## 📋 Índice
|
|
|
|
- [Tecnologias](#tecnologias)
|
|
- [Estrutura do Projeto](#estrutura-do-projeto)
|
|
- [Instalação](#instalação)
|
|
- [Scripts Disponíveis](#scripts-disponíveis)
|
|
- [Arquitetura](#arquitetura)
|
|
- [Componentes](#componentes)
|
|
- [Páginas](#páginas)
|
|
- [Contextos](#contextos)
|
|
- [Serviços](#serviços)
|
|
- [Tipos](#tipos)
|
|
- [Configuração](#configuração)
|
|
|
|
## 🚀 Tecnologias
|
|
|
|
- **React 19.2.0** - Biblioteca para construção de interfaces
|
|
- **TypeScript 5.8.2** - Superset JavaScript com tipagem estática
|
|
- **Vite 6.2.0** - Build tool e dev server de alta performance
|
|
- **React Router DOM 7.9.6** - Navegação entre páginas
|
|
- **Mapbox GL 3.16.0** - Mapas interativos
|
|
- **Google GenAI 1.30.0** - Integração com IA generativa do Google
|
|
- **Lucide React 0.554.0** - Ícones modernos
|
|
|
|
## 📁 Estrutura do Projeto
|
|
|
|
```
|
|
frontend/
|
|
├── components/ # Componentes reutilizáveis
|
|
│ ├── Button.tsx # Botão customizável
|
|
│ ├── EventCard.tsx # Card de exibição de eventos
|
|
│ ├── EventForm.tsx # Formulário de criação/edição de eventos
|
|
│ ├── Input.tsx # Input customizável
|
|
│ ├── InstitutionForm.tsx # Formulário de instituições
|
|
│ ├── MapboxMap.tsx # Componente de mapa interativo
|
|
│ └── Navbar.tsx # Barra de navegação
|
|
│
|
|
├── contexts/ # Context API para gerenciamento de estado
|
|
│ ├── AuthContext.tsx # Autenticação e usuários
|
|
│ └── DataContext.tsx # Eventos e instituições
|
|
│
|
|
├── pages/ # Páginas da aplicação
|
|
│ ├── Calendar.tsx # Calendário de eventos
|
|
│ ├── Dashboard.tsx # Painel principal
|
|
│ ├── Finance.tsx # Gestão financeira
|
|
│ ├── Home.tsx # Página inicial/landing
|
|
│ ├── Inspiration.tsx # Galeria de inspirações
|
|
│ ├── LGPD.tsx # Página de conformidade LGPD
|
|
│ ├── Login.tsx # Página de login
|
|
│ ├── PrivacyPolicy.tsx # Política de privacidade
|
|
│ ├── Register.tsx # Cadastro de novos usuários
|
|
│ ├── Settings.tsx # Configurações do sistema
|
|
│ ├── Team.tsx # Gestão de equipe
|
|
│ └── TermsOfUse.tsx # Termos de uso
|
|
│
|
|
├── services/ # Serviços externos e APIs
|
|
│ ├── genaiService.ts # Integração com Google GenAI
|
|
│ ├── mapboxService.ts # Serviços do Mapbox
|
|
│ └── mockGeoService.ts # Mock para testes de geolocalização
|
|
│
|
|
├── public/ # Arquivos estáticos
|
|
├── App.tsx # Componente raiz da aplicação
|
|
├── index.tsx # Ponto de entrada da aplicação
|
|
├── types.ts # Definições de tipos TypeScript
|
|
├── constants.ts # Constantes da aplicação
|
|
├── vite.config.ts # Configuração do Vite
|
|
├── tsconfig.json # Configuração do TypeScript
|
|
└── package.json # Dependências e scripts
|
|
```
|
|
|
|
## 🔧 Instalação
|
|
|
|
```bash
|
|
# Instalar dependências
|
|
npm install
|
|
|
|
# Configurar variáveis de ambiente
|
|
cp .env.example .env.local
|
|
|
|
# Editar .env.local com suas credenciais
|
|
# VITE_MAPBOX_TOKEN=seu_token_aqui
|
|
# GEMINI_API_KEY=sua_chave_aqui
|
|
```
|
|
|
|
## 📜 Scripts Disponíveis
|
|
|
|
```bash
|
|
# Iniciar servidor de desenvolvimento (porta 3000)
|
|
npm run dev
|
|
|
|
# Build para produção
|
|
npm run build
|
|
|
|
# Preview da build de produção
|
|
npm run preview
|
|
```
|
|
|
|
## 🏗️ Arquitetura
|
|
|
|
### Gerenciamento de Estado
|
|
|
|
O projeto utiliza **Context API** do React para gerenciar estado global:
|
|
|
|
- **AuthContext**: Gerencia autenticação, usuários e permissões
|
|
- **DataContext**: Gerencia eventos, instituições e dados relacionados
|
|
|
|
### Roteamento
|
|
|
|
Navegação baseada em estados internos controlada pelo componente `App.tsx`, sem uso de React Router para simplicidade.
|
|
|
|
### Estilização
|
|
|
|
Utiliza **Tailwind CSS** (via classes inline) com tema customizado:
|
|
|
|
- Cores principais: roxo (`brand-purple`) e preto (`brand-black`)
|
|
- Design responsivo mobile-first
|
|
- Componentes reutilizáveis estilizados
|
|
|
|
## 🧩 Componentes
|
|
|
|
### Button.tsx
|
|
|
|
Botão reutilizável com variantes de estilo e estados de carregamento.
|
|
|
|
### EventCard.tsx
|
|
|
|
Card para exibição visual de eventos com informações principais (data, tipo, status).
|
|
|
|
### EventForm.tsx
|
|
|
|
Formulário completo para criar e editar eventos com validação de campos.
|
|
|
|
### Input.tsx
|
|
|
|
Input customizado com suporte a diferentes tipos e validação.
|
|
|
|
### InstitutionForm.tsx
|
|
|
|
Formulário para cadastro e edição de instituições de ensino.
|
|
|
|
### MapboxMap.tsx
|
|
|
|
Componente de mapa interativo usando Mapbox GL para visualização de localizações.
|
|
|
|
### Navbar.tsx
|
|
|
|
Barra de navegação responsiva com menu e controle de autenticação.
|
|
|
|
## 📄 Páginas
|
|
|
|
### Home.tsx
|
|
|
|
Landing page com apresentação da empresa, serviços e informações de contato.
|
|
|
|
### Login.tsx / Register.tsx
|
|
|
|
Páginas de autenticação para acesso ao sistema.
|
|
|
|
### Dashboard.tsx
|
|
|
|
Painel principal com visualização e gerenciamento de eventos. Possui duas visualizações:
|
|
|
|
- **Lista de eventos**: Visão geral dos eventos
|
|
- **Criar evento**: Formulário de criação
|
|
|
|
### Calendar.tsx
|
|
|
|
Visualização de eventos em formato de calendário mensal.
|
|
|
|
### Team.tsx
|
|
|
|
Gestão da equipe de fotógrafos e colaboradores.
|
|
|
|
### Finance.tsx
|
|
|
|
Controle financeiro e relatórios de eventos.
|
|
|
|
### Settings.tsx
|
|
|
|
Configurações do sistema e preferências do usuário.
|
|
|
|
### Inspiration.tsx
|
|
|
|
Galeria de fotos e inspirações para clientes.
|
|
|
|
### PrivacyPolicy.tsx / TermsOfUse.tsx / LGPD.tsx
|
|
|
|
Páginas legais e de conformidade.
|
|
|
|
## 🔄 Contextos
|
|
|
|
### AuthContext
|
|
|
|
```typescript
|
|
interface AuthContextType {
|
|
user: User | null;
|
|
login: (email: string) => Promise<boolean>;
|
|
logout: () => void;
|
|
availableUsers: User[]; // Para demo
|
|
}
|
|
```
|
|
|
|
**Usuários Mock Disponíveis:**
|
|
|
|
- SuperAdmin: `admin@photum.com`
|
|
- Business Owner: `empresa@photum.com`
|
|
- Fotógrafo: `foto@photum.com`
|
|
- Cliente: `cliente@photum.com`
|
|
|
|
### DataContext
|
|
|
|
```typescript
|
|
interface DataContextType {
|
|
events: EventData[];
|
|
institutions: Institution[];
|
|
addEvent: (event: EventData) => void;
|
|
updateEventStatus: (id: string, status: EventStatus) => void;
|
|
assignPhotographer: (eventId: string, photographerId: string) => void;
|
|
getEventsByRole: (userId: string, role: string) => EventData[];
|
|
addInstitution: (institution: Institution) => void;
|
|
updateInstitution: (id: string, institution: Partial<Institution>) => void;
|
|
getInstitutionsByUserId: (userId: string) => Institution[];
|
|
getInstitutionById: (id: string) => Institution | undefined;
|
|
}
|
|
```
|
|
|
|
## 🛠️ Serviços
|
|
|
|
### genaiService.ts
|
|
|
|
Integração com Google Gemini AI para funcionalidades de IA generativa.
|
|
|
|
### mapboxService.ts
|
|
|
|
Serviços de mapeamento e geolocalização usando Mapbox API.
|
|
|
|
### mockGeoService.ts
|
|
|
|
Serviço mock para testes de geolocalização sem consumir API externa.
|
|
|
|
## 📝 Tipos
|
|
|
|
### UserRole (Enum)
|
|
|
|
- `SUPERADMIN`: Acesso total ao sistema
|
|
- `BUSINESS_OWNER`: Proprietário do negócio
|
|
- `EVENT_OWNER`: Cliente/dono do evento
|
|
- `PHOTOGRAPHER`: Fotógrafo
|
|
|
|
### EventStatus (Enum)
|
|
|
|
- `PENDING_APPROVAL`: Aguardando aprovação
|
|
- `PLANNING`: Em planejamento
|
|
- `CONFIRMED`: Confirmado
|
|
- `IN_PROGRESS`: Em execução
|
|
- `DELIVERED`: Entregue
|
|
- `ARCHIVED`: Arquivado
|
|
|
|
### EventType (Enum)
|
|
|
|
- `WEDDING`: Casamento
|
|
- `CORPORATE`: Corporativo
|
|
- `BIRTHDAY`: Aniversário
|
|
- `DEBUTANTE`: Debutante
|
|
- `OTHER`: Outro
|
|
|
|
### Interfaces Principais
|
|
|
|
```typescript
|
|
interface User {
|
|
id: string;
|
|
name: string;
|
|
email: string;
|
|
role: UserRole;
|
|
avatar?: string;
|
|
institutionId?: string;
|
|
}
|
|
|
|
interface Institution {
|
|
id: string;
|
|
name: string;
|
|
type: string;
|
|
cnpj?: string;
|
|
phone: string;
|
|
email: string;
|
|
address?: Address;
|
|
description?: string;
|
|
ownerId: string;
|
|
}
|
|
|
|
interface EventData {
|
|
id: string;
|
|
name: string;
|
|
date: string;
|
|
time: string;
|
|
type: EventType;
|
|
status: EventStatus;
|
|
address: Address;
|
|
contacts: Contact[];
|
|
checklist: ChecklistItem[];
|
|
briefing: string;
|
|
coverImage: string;
|
|
ownerId: string;
|
|
photographerIds: string[];
|
|
institutionId?: string;
|
|
}
|
|
```
|
|
|
|
## ⚙️ Configuração
|
|
|
|
### vite.config.ts
|
|
|
|
```typescript
|
|
- Porta padrão: 3000
|
|
- Host: 0.0.0.0 (acesso externo)
|
|
- Variáveis de ambiente: GEMINI_API_KEY
|
|
- Alias: '@' aponta para a raiz do frontend
|
|
```
|
|
|
|
### Variáveis de Ambiente
|
|
|
|
Crie um arquivo `.env.local`:
|
|
|
|
```env
|
|
VITE_MAPBOX_TOKEN=seu_token_mapbox
|
|
GEMINI_API_KEY=sua_chave_gemini
|
|
```
|
|
|
|
## 🎨 Design System
|
|
|
|
### Cores Principais
|
|
|
|
- **brand-purple**: Cor primária da marca
|
|
- **brand-black**: Cor secundária/texto
|
|
- Tons de cinza para backgrounds e bordas
|
|
|
|
### Breakpoints Responsivos
|
|
|
|
- Mobile: < 640px
|
|
- Tablet: 640px - 1024px
|
|
- Desktop: > 1024px
|
|
|
|
## 📱 Funcionalidades
|
|
|
|
- ✅ Autenticação multi-perfil (SuperAdmin, Owner, Photographer, Client)
|
|
- ✅ CRUD completo de eventos
|
|
- ✅ Gestão de instituições de ensino
|
|
- ✅ Calendário visual de eventos
|
|
- ✅ Mapas interativos com Mapbox
|
|
- ✅ Sistema de checklists para eventos
|
|
- ✅ Galeria de inspirações
|
|
- ✅ Gestão de equipe
|
|
- ✅ Controle financeiro
|
|
- ✅ Páginas de conformidade legal (LGPD, Termos, Privacidade)
|
|
|
|
## 🔒 Segurança
|
|
|
|
- Autenticação baseada em contexto
|
|
- Validação de permissões por role
|
|
- Proteção de rotas baseada em autenticação
|
|
- Conformidade com LGPD
|
|
|
|
## 🚧 Desenvolvimento
|
|
|
|
O projeto está configurado com:
|
|
|
|
- Hot Module Replacement (HMR)
|
|
- TypeScript strict mode
|
|
- Linting automático
|
|
- Path aliases
|
|
|
|
## 📞 Suporte
|
|
|
|
Para dúvidas ou problemas:
|
|
|
|
- Email: contato@photum.com.br
|
|
- Tel: (19) 3405 5024 | (19) 3621 4621
|
|
|
|
---
|
|
|
|
**Desenvolvido por Photum Formaturas** © 2025
|