Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Event Access Platform

Plataforma SaaS de eventos com checkout, Pix, ingresso digital, QR Code individual e controle de entrada concorrente. O repositório contém backend Java/Spring Boot, frontend Angular/Taiga UI e infraestrutura Docker.

Arquitetura adotada

  1. Backend: Java 21, Spring Boot 3.5.16, Spring Security, JPA/Hibernate, PostgreSQL, Flyway, JWT, Swagger e ZXing.
  2. Frontend: Angular 20 LTS, standalone components, Signals, Reactive Forms, Taiga UI 5.16 e PWA.
  3. Pagamento: PaymentProvider desacoplado, com FakePaymentProvider e integração Pix AsaasPaymentProvider para Sandbox/produção.
  4. Check-in: token opaco, armazenamento somente do hash e atualização atômica contra uso simultâneo.
  5. Integração: URLs relativas /api; proxy do Angular no desenvolvimento e proxy do Nginx no Docker.

Estrutura

event-access-platform/
├── backend/
├── frontend/
├── infrastructure/
├── docs/
├── docker-compose.yml
├── .env.example
├── Makefile
├── start.sh
└── start.ps1

Execução completa

Pré-requisitos: Docker Engine e Docker Compose v2.

cp .env.example .env
docker compose up --build

No Windows PowerShell:

./start.ps1

URLs

Recuperação de senha

/forgot-password gera um link de uso único, válido por 30 minutos, enviado por e-mail. Em desenvolvimento a stack sobe com o Mailpit e a mensagem aparece em http://localhost:8025 — nada sai para a internet. Em produção, aponte MAIL_HOST/MAIL_PORT para o provedor real e mantenha MAIL_ENABLED=true. A resposta da API é sempre a mesma, exista ou não a conta.

Relatórios

Cada evento exporta em dois formatos:

  • CSV (/reports/sales, /reports/checkins) — dados brutos para importar em outra ferramenta.
  • XLSX (/reports/workbook.xlsx, /reports/sales.xlsx, /reports/checkins.xlsx) — planilha formatada com abas de resumo, vendas, ingressos e entradas, cabeçalho congelado, filtros, valores em moeda e datas no fuso da organização.

Tema claro e escuro

O tema é aplicado no elemento <html> (atributo tuiTheme) e aceita três estados: claro, escuro e "seguir o sistema". A escolha fica em localStorage e o controle está disponível também nas telas de login e recuperação de senha.

Credenciais de desenvolvimento

Perfil E-mail Senha
SUPER_ADMIN admin@eventaccess.local Admin@123
ORGANIZER_ADMIN organizer@eventaccess.local Organizer@123
DOOR_STAFF door@eventaccess.local Door@123

As contas são criadas somente quando APP_ENVIRONMENT=development.

Teste rápido do fluxo

  1. Entre com organizer@eventaccess.local.
  2. Abra Eventos e use o checkout público da Festa de Verão.
  3. Escolha Comum ou Premium e conclua a identificação.
  4. Com PAYMENT_PROVIDER=FAKE, aprove a simulação. Com ASAAS, confirme a cobrança no painel Sandbox e aguarde o webhook ou use Sincronizar em Pagamentos.
  5. Abra o ingresso emitido.
  6. Entre como door@eventaccess.local, abra Portaria, selecione evento e portaria e leia o QR Code.
  7. A primeira leitura é aprovada; a segunda é recusada como ALREADY_USED.

Comandos de desenvolvimento

Backend:

cd backend
mvn clean verify
mvn spring-boot:run

Frontend:

cd frontend
npm install
npm run lint
npm run test
npm run build
npm start

Parar e limpar

docker compose down
docker compose down -v --remove-orphans

Segurança

  • BCrypt para senhas.
  • Access token curto e refresh token rotativo armazenado como hash.
  • Autorização no backend por perfil.
  • Consultas administrativas filtradas pela organização autenticada.
  • QR token HMAC-SHA-256, sem dados pessoais e sem persistência em texto puro.
  • Reserva de estoque com lock pessimista.
  • Aprovação idempotente e check-in atômico.
  • CORS restritivo, headers de segurança e respostas de erro padronizadas.
  • Inicialização em produção é bloqueada quando o JWT usa o segredo padrão.

Variáveis

Copie .env.example. Em produção, substitua obrigatoriamente JWT_SECRET, QR_SECRET, senha do banco, origens CORS e URLs públicas.

Gerar o ZIP novamente

make zip

Escopo entregue

O ZIP implementa de ponta a ponta os fluxos críticos: login, isolamento organizacional, eventos, categorias, checkout, Pix fake ou Asaas, webhook idempotente, emissão, QR Code, portaria, recusa de duplicidade e dashboard. O schema inclui também as entidades previstas para convites, equipe, reembolsos e auditoria, deixando os módulos administrativos secundários preparados para expansão sem alterar o núcleo transacional.

Atualizações da interface

A versão v5 corrige os seletores de perfil, evento e categoria, adiciona categorias de ingresso em português, color picker da pulseira e tratamento guiado para publicação sem ingressos. Consulte CHANGELOG-v5.md e docs/ui-patch-v5.md.

Asaas Sandbox

Use .env.asaas.example como base. Você precisará da API Key de Sandbox e de um token próprio para o webhook. Não envie nem versione esses segredos. O guia completo está em docs/asaas-sandbox.md.

Copy-Item .env.asaas.example .env
notepad .env
podman compose up --build -d

A versão v6 também corrige o checkout público, o armazenamento do QR Code Base64 e a atualização automática do faturamento. Consulte CHANGELOG-v6.md.

Atualização v6.3

A versão v6.3 fecha o fluxo operacional do ingresso e da portaria:

  • check-in manual por código público TKT-...;
  • leitura por token opaco ou URL completa /t/{token} e /ticket/{token};
  • download do ingresso completo em PNG;
  • download separado do QR Code;
  • aceite visível e separado dos Termos de Uso e da Política de Privacidade;
  • páginas públicas /termos-de-uso e /politica-de-privacidade;
  • auditoria do check-in manual pelo endpoint /checkins/manual.

Consulte CHANGELOG-v6.3.md e docs/v6.3-checkin-ticket-legal.md.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages