Event Subscription Design Specification - gameEvents

This document provides a detailed architectural overview of the gameEvents event subscription within the leaderboard service. It covers the subscription’s transport configuration, topic definitions, authorization model, and payload transformations.

Subscription Overview

Description: Subscribes to gameplay events so the leaderboard can update ELO ratings, player stats, and rankings when games are completed.

Topics

This subscription exposes 1 Kafka topic to connected clients:

gameCompleted

Fires when a chess game is updated (status changes to completed/terminated). Used to trigger ELO recalculation and leaderboard rank updates for both players.

Excluded Fields

The following fields are stripped from the payload before sending to clients: invitationCode

Authorization

The subscription uses a layered authorization model that controls which users can connect and which topics they receive:

Absolute Roles

Users with roles administrator bypass all authorization checks and receive all topics without filtering.

Event Filter Script

Evaluated for each incoming Kafka event before delivery. Returns false to skip the event for the user:

data.result != null && (data.status == 'completed' || data.status == 'terminated')

Context variables: session, topicName, dataObjectName, data

Client Integration

WebSocket Connection (Socket.IO)

import { io } from 'socket.io-client';

const socket = io('/events/gameEvents', {
  auth: { token: 'your-jwt-token' }
});

// Subscribe to specific topics
socket.on('gameCompleted', (data) => {
  console.log('gameCompleted event:', data);
});


socket.on('connect', () => console.log('Connected to gameEvents'));
socket.on('disconnect', () => console.log('Disconnected from gameEvents'));

This document was generated from the event subscription configuration and should be kept in sync with design changes.