Skip to content

Sport Tech Club - Integração com Untopika Workspace

Documentação dos recursos do ecossistema Untopika que serão reutilizados no Sport Tech Club.

Visão Geral

O Sport Tech Club será desenvolvido como parte do ecossistema Untopika, aproveitando toda a infraestrutura, bibliotecas e serviços compartilhados já existentes. Esta abordagem acelera o desenvolvimento, mantém consistência arquitetural e reduz custos operacionais.

Repositórios Untopika Disponíveis

RepositórioDescriçãoStatus
untopika-workspaceInfraestrutura Docker para desenvolvimento localProdução
untopika-iamIdentity & Access Management com KeycloakEm desenvolvimento
untopika-walletPlataforma de créditos virtuais multi-tenantEm desenvolvimento
untopika-webkitDesign System Vue 3 + TypeScriptEm desenvolvimento
untopika-core-mcpCore MCP integrationsPlanejado

1. untopika-workspace (Infraestrutura)

O que é

Ambiente de desenvolvimento Docker Compose com todos os serviços de infraestrutura necessários.

Serviços Disponíveis

ServiçoImagemPortaIP
PostgreSQL 16postgres:16-alpine5432172.30.1.10
pgAdmin 4dpage/pgadmin4:9.109000172.30.100.10
Keycloak 26quay.io/keycloak/keycloak:26.0.79090172.30.100.20
Prometheusprom/prometheus:v3.0.19091172.30.100.30
Grafanagrafana/grafana:11.4.09092172.30.100.40
Jaegerjaegertracing/all-in-one:1.64.09093172.30.100.50
RabbitMQrabbitmq:3.13-management-alpine5672/15672172.30.3.10
Redis 7redis:7-alpine6380172.30.2.10
Airflowapache/airflow:2.10.4-python3.118080172.30.10.10
Evolution APIatendai/evolution-api:v2.2.39094172.30.4.10
Evolution Manageratendai/evolution-manager9095172.30.4.20

O que o STC vai reutilizar

  1. PostgreSQL 16

    • Banco de dados compartilhado com schemas isolados
    • Extensões: uuid-ossp, pg_trgm, btree_gin, btree_gist
    • Configuração: UTF-8, pt_BR, timezone São Paulo
  2. Keycloak 26

    • Autenticação OAuth 2.0 / OIDC
    • Multi-tenancy via atributos de usuário
    • Realms e clients pré-configurados
    • Themes customizáveis
  3. Redis 7

    • Cache de sessão
    • Rate limiting
    • Cache de dados frequentes
  4. RabbitMQ

    • Eventos assíncronos (bookings, payments)
    • Notificações em tempo real
    • Integração com webhooks
  5. Observabilidade (Prometheus + Grafana + Jaeger)

    • Métricas de aplicação
    • Dashboards pré-configurados
    • Tracing distribuído

Como Usar

bash
# Clone o workspace (se ainda não tiver)
git clone git@github.com:Untopika/untopika-workspace.git
cd untopika-workspace

# Configure variáveis
cp .env.example .env

# Inicie a infraestrutura
./deploy.sh local

# Valide os serviços
./validate.sh

2. untopika-iam (Identity & Access Management)

O que é

Serviços e SDKs para gerenciamento de identidade multi-tenant.

Estrutura

untopika-iam/
├── services/
│   └── identity-admin-service/   # API REST (porta 8081)
├── libs/
│   ├── node/                     # SDK TypeScript
│   └── python/                   # SDK Python
└── docs/                         # Documentação

O que o STC vai reutilizar

  1. Identity Admin Service

    • CRUD de usuários via API
    • Gestão de roles e permissions
    • Audit logging
  2. SDK Node.js (@untopika/id-client)

    typescript
    import { UntopikaIdClient } from '@untopika/id-client';
    
    const client = new UntopikaIdClient({
      baseUrl: process.env.IAM_SERVICE_URL,
      clientId: 'sport-tech-club',
      clientSecret: process.env.IAM_CLIENT_SECRET,
    });
    
    // Criar usuário
    const user = await client.users.create({
      email: 'jogador@example.com',
      firstName: 'Rafael',
      lastName: 'Silva',
      attributes: {
        tenant_id: 'arena-copacabana',
      },
    });
  3. Modelo de Autorização

    • Roles: SUPER_ADMIN, ARENA_OWNER, ARENA_MANAGER, PLAYER
    • Scopes por API
    • Token claims customizados
  4. Multi-tenancy

    • Isolamento por tenant_id no token
    • RLS integrado com PostgreSQL

Documentação Relevante

  • /docs/architecture.md - Arquitetura do IAM
  • /docs/authorization-model.md - Modelo de autorização
  • /docs/tenants.md - Multi-tenancy
  • /docs/sdk-usage.md - Uso dos SDKs

3. untopika-wallet (Créditos Virtuais)

O que é

Plataforma de créditos virtuais (pontos, tokens) multi-tenant.

Estrutura (Clean Architecture)

untopika-wallet/
├── src/
│   ├── domain/           # Regras de negócio
│   ├── application/      # Casos de uso
│   ├── infrastructure/   # Frameworks
│   └── presentation/     # Controllers
├── prisma/               # Schema do banco
└── docs/                 # Documentação

O que o STC vai reutilizar

  1. Sistema de Wallet

    • Créditos para reservas (pré-pago)
    • Pontos de fidelidade (gamificação)
    • Cashback de reservas
  2. API de Transações

    typescript
    // Creditar wallet do jogador
    POST /v1/transactions/credit
    {
      "walletId": "w_abc123",
      "amount": 10000,  // R$ 100.00 em centavos
      "referenceType": "BOOKING_PAYMENT",
      "referenceId": "booking_xyz"
    }
    
    // Debitar para reserva
    POST /v1/transactions/debit
    {
      "walletId": "w_abc123",
      "amount": 5000,
      "referenceType": "BOOKING",
      "referenceId": "booking_123"
    }
  3. Ledger Imutável

    • Histórico completo de transações
    • Auditoria e compliance (LGPD)
    • Idempotência obrigatória
  4. Webhooks

    • Eventos de transação
    • Notificações em tempo real

Funcionalidades Aplicadas ao STC

Funcionalidade WalletUso no Sport Tech Club
CréditoRecarga de saldo para reservas
DébitoPagamento de reserva
TransferênciaDividir pagamento entre jogadores
CashbackRecompensa por frequência
PontosSistema de XP e níveis

Documentação Relevante

  • /docs/architecture/ARCHITECTURE.md - ADRs
  • /docs/api/openapi.yaml - Especificação da API
  • /docs/requirements/USE-CASES.md - Casos de uso

4. untopika-webkit (Design System)

O que é

Biblioteca de componentes Vue 3 + TypeScript com sistema de temas.

Estrutura

untopika-webkit/
├── packages/
│   ├── untopika-core/    # Biblioteca de componentes
│   └── docs/             # Documentação interativa

O que o STC vai reutilizar

  1. Componentes Base

    • Buttons, Cards, Inputs, Selects
    • DockContainer (layout master page)
    • Modals, Toasts, Alerts
  2. Sistema de Temas

    • 6 temas pré-definidos (Dark, Light, Midnight, Ocean, Sunset, Forest)
    • CSS Variables para customização
    • Suporte a tema claro/escuro
  3. Uso no STC

    typescript
    // Instalação
    import { createUntopikaCore } from '@untopika/core';
    import '@untopika/core/style.css';
    
    const app = createApp(App);
    app.use(createUntopikaCore({
      theme: 'ocean', // Tema azul mar para esportes de praia
    }));
  4. Customização para STC

    css
    :root {
      /* Brand Sport Tech Club */
      --utk-primary: #00A86B;      /* Verde Arena */
      --utk-secondary: #1E88E5;    /* Azul Mar */
      --utk-accent: #FF6B35;       /* Laranja Sol */
    }

Tecnologias

  • Vue 3.5 (Composition API + <script setup>)
  • TypeScript 5.7
  • Vite 6
  • Bootstrap 5.3 (utilities)

Matriz de Reutilização

RecursoOrigemUso no STCCustomização
PostgreSQLworkspaceSimSchemas próprios
Keycloakworkspace + iamSimRealm STC, themes
RedisworkspaceSimPrefixo stc:
RabbitMQworkspaceSimExchanges próprios
Prometheus/GrafanaworkspaceSimDashboards STC
JaegerworkspaceSimService name
Identity ServiceiamSimRoles STC
SDK @untopika/id-clientiamSimNenhuma
Wallet APIwalletSimNamespace STC
@untopika/corewebkitSimTema customizado

Configuração do Sport Tech Club

Variáveis de Ambiente (referenciando Untopika)

env
# ===========================================
# UNTOPIKA WORKSPACE SERVICES
# ===========================================

# PostgreSQL (untopika-workspace)
DATABASE_URL=postgresql://untopika:untopikalocal_password@localhost:5432/stc_dev

# Keycloak (untopika-workspace)
KEYCLOAK_URL=http://localhost:9090
KEYCLOAK_REALM=sport-tech-club
KEYCLOAK_CLIENT_ID=stc-api
KEYCLOAK_CLIENT_SECRET=<secret>

# Redis (untopika-workspace)
REDIS_URL=redis://:untopika_redis_local@localhost:6380

# RabbitMQ (untopika-workspace)
RABBITMQ_URL=amqp://untopika:untopika_rabbitmq_local@localhost:5672/untopika

# Jaeger (untopika-workspace)
OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318

# ===========================================
# UNTOPIKA SERVICES
# ===========================================

# Identity Admin Service (untopika-iam)
IAM_SERVICE_URL=http://localhost:8081
IAM_CLIENT_ID=sport-tech-club
IAM_CLIENT_SECRET=<secret>

# Wallet Service (untopika-wallet)
WALLET_SERVICE_URL=http://localhost:3000
WALLET_NAMESPACE_ID=ns_sport_tech_club

Docker Compose (Extensão do Workspace)

yaml
# sport-tech-club/docker-compose.yml
# Estende o untopika-workspace

networks:
  untopika-network:
    external: true

services:
  stc-api:
    build: ./apps/api
    container_name: stc-api-local
    environment:
      DATABASE_URL: postgresql://untopika:untopikalocal_password@untopika-postgres-local:5432/stc_dev
      KEYCLOAK_URL: http://untopika-keycloak-local:8080
      REDIS_URL: redis://:untopika_redis_local@untopika-redis-local:6379
    networks:
      - untopika-network
    ports:
      - "3001:3000"
    depends_on:
      - untopika-postgres-local  # via network externa

Fluxo de Desenvolvimento


Benefícios da Integração

1. Time-to-Market Reduzido

  • Infraestrutura pronta (weeks → hours)
  • Autenticação pronta (months → days)
  • Wallet pronta (months → days)
  • UI components prontos (weeks → days)

2. Consistência

  • Mesmos padrões de código
  • Mesma arquitetura (Clean Architecture)
  • Mesmas práticas (TDD, GitFlow)
  • Mesma observabilidade

3. Custo Operacional

  • Infraestrutura compartilhada
  • Menos código para manter
  • Menos bugs (código testado)
  • Menos deploy (serviços centralizados)

4. Escalabilidade

  • Serviços já otimizados
  • Padrões multi-tenant prontos
  • RLS implementado
  • Cache configurado

Próximos Passos

  1. [ ] Configurar realm sport-tech-club no Keycloak
  2. [ ] Criar namespace no Wallet Service
  3. [ ] Criar tema STC no webkit
  4. [ ] Configurar schemas no PostgreSQL
  5. [ ] Criar exchanges no RabbitMQ
  6. [ ] Configurar dashboards no Grafana

Última atualização: 2025-01-09