MC Matheus Carino

Projeto

Bilheteria Digital

Plataforma de venda de ingressos online, desenvolvida do zero com Go, Next.js e infraestrutura multi-cloud (OCI + AWS). Suporta criação e gestão de eventos, compra de ingressos com pagamento via Pix (Mercado Pago), carteira digital com saldo e transferências, painel de fornecedores e administração.

Stack

Go 1.25 Gin Next.js 14 TypeScript MongoDB Kubernetes (OKE) Terraform AWS ECR AWS Route 53 OCI ARM64 Traefik Let's Encrypt Mercado Pago Pix Google OAuth2 JWT OpenTelemetry Grafana GitHub Actions Tailwind CSS

Diagrama de infraestrutura

Multi-cloud: cluster Kubernetes ARM64 na Oracle Cloud (OKE), container registry e DNS na AWS. CI/CD via GitHub Actions com OIDC sem credenciais persistentes.

AWS Route 53 agendafresno.com.br api · tickets · traefik AWS ECR agendafresno/api-core agendafresno/frontend S3 + DynamoDB Terraform state agendafresno-tfstate GitHub Actions CI: test → build push linux/arm64 OIDC (sem credenciais) kubectl rollout Internet Usuário / Browser OCI — us-ashburn-1 / Oracle Kubernetes Engine (OKE) OCI Load Balancer Flexible Shape · 10–100 Mbps Ingress externo Traefik Ingress TLS — Let's Encrypt ACME HTTP → HTTPS redirect namespace: agendafresno api Go 1.25 · Gin · REST 2 réplicas · ARM64 :8080 · ClusterIP 250m/128Mi → 500m/256Mi JWT · RBAC · OpenTelemetry frontend Next.js 14 · App Router · TypeScript 2 réplicas · ARM64 :3000 · ClusterIP 250m/256Mi → 500m/512Mi Tailwind · SWR · Zod CronJob: ecr-token-refresh — renova ecr-pull-secret a cada 6h (tokens ECR expiram em 12h) Serviços externos MongoDB Banco de dados principal MONGODB_URI Mercado Pago Pagamento Pix Webhook + polling Reconciliação 10min Google OAuth2 Login social /auth/google callback redirect Slack Alertas ops Webhook notificações Grafana OTLP / HTTP traces · metrics logs

Arquitetura do sistema

Fluxo de dados entre o browser, o frontend Next.js e a API Go. A API segue Domain-Driven Design com 8 domínios, autenticação JWT + RBAC e quatro perfis de acesso.

Browser HTTPS auth_token cookie Next.js 14 — App Router Páginas públicas / · /events/[id] /merch · /auth/login /checkout/[orderId] Rotas protegidas /orders · /profile · /wallet middleware.ts (cookie check) Fornecedor /fornecedor/ events · products Admin /admin/ users · orders API Go / Gin — /api/v1 Middleware: JWT Auth · RBAC (admin | cliente | fornecedor | parceiro) OpenTelemetry traces · CORS auth register · login Google OAuth2 user perfil · senha admin CRUD event criar · publicar cancelar ticket tipos · assentos disponibilidade order criar · cancelar histórico payment Pix · webhook status wallet saldo · depósito transferência · reconciliação product mercadorias · fornecedor gestão de catálogo handler → service → repository → model (DDD) Background: wallet.Reconcile — a cada 10min audita depósitos contra Mercado Pago GET /health liveness check K8s probe POST /payments/webhook Mercado Pago callback verificação de assinatura MongoDB coleções por domínio valores em centavos MONGODB_URI Mercado Pago Pix · QR Code MP_ACCESS_TOKEN Google OAuth2 GOOGLE_CLIENT_ID + CLIENT_SECRET Slack Webhook alertas OTLP traces metrics Perfis de acesso (RBAC) admin — gestão total: usuários, pedidos, carteiras, reconciliação fornecedor / parceiro — criar e gerenciar eventos e produtos cliente — comprar ingressos, carteira, histórico de pedidos

API — Domínios

Modelo de domínios

auth
  • Registro e login (email/senha)
  • Login Google OAuth2
  • JWT Bearer tokens
  • Middleware RBAC
user
  • Perfil e senha (self-service)
  • Admin: listar, atribuir roles
  • Ativar/desativar contas
event
  • Criar e editar eventos
  • Publicar / cancelar
  • Listagem pública
  • Painel fornecedor
ticket
  • Tipos de ingresso por evento
  • Controle de assentos
  • Disponibilidade em tempo real
order
  • Criação de pedido
  • Cancelamento
  • Histórico do cliente
  • Visão admin de todos pedidos
payment
  • Pix via Mercado Pago
  • Webhook de confirmação
  • Status de pagamento
  • Verificação de assinatura
wallet
  • Carteira digital por usuário
  • Depósito e transferência
  • Histórico de transações
  • Reconciliação automática (10min)
product
  • Catálogo de mercadorias
  • Gestão por fornecedor
  • Listagem pública (/merch)

CI/CD

Pipeline de entrega

GitHub Actions com OIDC — nenhuma credencial AWS de longa duração armazenada. Build multiplataforma ARM64 via QEMU + Docker Buildx, deploy contínuo com rollout no cluster OKE.

api-core go vet + go test -race → build linux/arm64 → push ECR → kubectl set image
frontend tsc --noEmit + eslint → build linux/arm64 → push ECR → kubectl set image
core-infra terraform validate + fmt → plan (PR comment) → apply -auto-approve (main)