Feature: Pairing history tracking #4

Open
opened 2026-01-21 10:53:13 -08:00 by naomi · 0 comments
Owner

Summary

Track who has been grouped with whom (per server) to enable smart grouping that prioritizes fresh pairings.

Database Schema

interface PairingRecord {
  id: string;              // Unique ID
  guildId: string;         // Discord server ID
  sessionId: string;       // Groups pairings from same breakout
  userAId: string;         // First user in pairing
  userBId: string;         // Second user in pairing
  sessionDate: Date;       // When the pairing occurred
}

Storage Options

  • SQLite - Simple, file-based, good for single-server deployments
  • PostgreSQL - Better for multi-server production deployment
  • MongoDB - If we want more flexibility

Recommend starting with SQLite for simplicity, with an abstraction layer to swap later.

API

// Record all pairings from a breakout session
recordSession(guildId: string, groups: string[][]): Promise<void>

// Get pairing history for a user
getUserPairings(guildId: string, userId: string): Promise<PairingRecord[]>

// Get when two users last met
getLastPairing(guildId: string, userA: string, userB: string): Promise<Date | null>

// Get all pairings for smart grouping algorithm
getAllPairings(guildId: string): Promise<PairingRecord[]>

Privacy Considerations

  • Data is per-guild (server admins can request deletion)
  • Consider a /breakout history clear admin command
  • Add to PRIVACY.md documentation

Acceptance Criteria

  • Database schema implemented
  • Pairings recorded after each breakout session
  • API functions for querying pairing history
  • Data isolated per guild

This issue was created with help from Hikari~ 🌸

## Summary Track who has been grouped with whom (per server) to enable smart grouping that prioritizes fresh pairings. ## Database Schema ```typescript interface PairingRecord { id: string; // Unique ID guildId: string; // Discord server ID sessionId: string; // Groups pairings from same breakout userAId: string; // First user in pairing userBId: string; // Second user in pairing sessionDate: Date; // When the pairing occurred } ``` ## Storage Options - **SQLite** - Simple, file-based, good for single-server deployments - **PostgreSQL** - Better for multi-server production deployment - **MongoDB** - If we want more flexibility Recommend starting with SQLite for simplicity, with an abstraction layer to swap later. ## API ```typescript // Record all pairings from a breakout session recordSession(guildId: string, groups: string[][]): Promise<void> // Get pairing history for a user getUserPairings(guildId: string, userId: string): Promise<PairingRecord[]> // Get when two users last met getLastPairing(guildId: string, userA: string, userB: string): Promise<Date | null> // Get all pairings for smart grouping algorithm getAllPairings(guildId: string): Promise<PairingRecord[]> ``` ## Privacy Considerations - Data is per-guild (server admins can request deletion) - Consider a `/breakout history clear` admin command - Add to PRIVACY.md documentation ## Acceptance Criteria - [ ] Database schema implemented - [ ] Pairings recorded after each breakout session - [ ] API functions for querying pairing history - [ ] Data isolated per guild --- ✨ This issue was created with help from Hikari~ 🌸
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: nhcarrigan/rondelle#4