Files
query-orchestration/internal/database/migrations/00000000000121_create_eula_tables.up.sql
T
Jay Brown 63c12a2f44 Merged in feature/eula.part1 (pull request #206)
eula support

* eula support

* docs
2026-01-22 18:17:27 +00:00

42 lines
1.7 KiB
SQL

-- Create eulaVersions table for storing EULA versions
CREATE TABLE eulaVersions (
id uuid PRIMARY KEY DEFAULT uuid_generate_v7(),
version VARCHAR(50) NOT NULL UNIQUE,
title TEXT NOT NULL,
content TEXT NOT NULL,
effectiveDate TIMESTAMPTZ NOT NULL,
createdAt TIMESTAMPTZ NOT NULL DEFAULT NOW(),
createdBy VARCHAR(320) NOT NULL,
isCurrent BOOLEAN NOT NULL DEFAULT FALSE,
activatedAt TIMESTAMPTZ,
activatedBy VARCHAR(320)
);
-- Partial unique index enforces only ONE row can have isCurrent=true at any time
CREATE UNIQUE INDEX idx_eulaversions_one_current ON eulaVersions(isCurrent) WHERE isCurrent = TRUE;
-- Index for quick lookup of current version
CREATE INDEX idx_eulaversions_effectivedate ON eulaVersions(effectiveDate DESC);
-- Index for isCurrent lookup (used in GetCurrentEulaVersion)
CREATE INDEX idx_eulaversions_iscurrent ON eulaVersions(isCurrent);
-- Create eulaAgreements table for tracking user agreements
CREATE TABLE eulaAgreements (
id uuid PRIMARY KEY DEFAULT uuid_generate_v7(),
cognitoSubjectId VARCHAR(256) NOT NULL,
userEmail VARCHAR(320) NOT NULL,
eulaVersionId uuid NOT NULL REFERENCES eulaVersions(id) ON DELETE RESTRICT,
agreedAt TIMESTAMPTZ NOT NULL DEFAULT NOW(),
agreedFromIp VARCHAR(45) NOT NULL,
UNIQUE(cognitoSubjectId, eulaVersionId)
);
-- Basic indexes
CREATE INDEX idx_eulaagreements_subjectid ON eulaAgreements(cognitoSubjectId);
CREATE INDEX idx_eulaagreements_versionid ON eulaAgreements(eulaVersionId);
-- Composite indexes for common read patterns
CREATE INDEX idx_eulaagreements_version_time ON eulaAgreements(eulaVersionId, agreedAt DESC);
CREATE INDEX idx_eulaagreements_user_time ON eulaAgreements(cognitoSubjectId, agreedAt DESC);