Files
thrilltrack-explorer/docs/versioning/ARCHITECTURE.md
2025-10-15 17:54:53 +00:00

1.8 KiB

Versioning System Architecture

System design, data flow, and architectural decisions

System Overview

The Universal Versioning System is a relational database-backed solution for tracking all changes to entities throughout their lifecycle. It uses PostgreSQL triggers, session variables, and type-safe relational tables to provide automatic, transparent versioning.

Design Philosophy

Core Principles

  1. Automatic & Transparent - Versioning happens automatically via triggers
  2. Pure Relational - No JSONB storage, all fields are typed columns
  3. Audit-First - Every change is attributed to a user and optionally a submission
  4. Type-Safe - Foreign keys and constraints enforce data integrity
  5. Performance-Conscious - Proper indexing and cleanup mechanisms

Why Not JSONB?

The previous system stored versions as JSONB blobs. We migrated to relational for:

Issue with JSONB Relational Solution
Not queryable without JSONB operators Standard SQL WHERE clauses
No type safety Column-level types and constraints
Poor performance on large datasets Indexed columns
Can't use foreign keys Full referential integrity
Complex RLS policies Standard column-level RLS

High-Level Architecture

graph TB
    subgraph "Frontend Layer"
        UI[React Components]
        HOOKS[React Hooks]
    end
    
    subgraph "Backend Layer"
        EDGE[Edge Functions]
        DB[(PostgreSQL)]
        TRIGGERS[Database Triggers]
    end
    
    UI --> HOOKS
    HOOKS --> DB
    EDGE --> SESSION[Set Session Variables]
    SESSION --> DB
    DB --> TRIGGERS
    TRIGGERS --> VERSIONS[Version Tables]
    
    style VERSIONS fill:#4CAF50
    style TRIGGERS fill:#2196F3
    style SESSION fill:#FF9800