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