63c12a2f44
eula support * eula support * docs
42 lines
1.7 KiB
SQL
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);
|