a080ca59d8
Implement v2 upload batch cleanup * Implement v2 upload batch cleanup * Merge remote-tracking branch 'origin/main' into jmathison/v2-upload-batch * Address upload batch review feedback * Raise batch worker coverage * Fix batch cleanup review issues Approved-by: Jay Brown
138 lines
5.5 KiB
SQL
138 lines
5.5 KiB
SQL
-- name: CreateEulaVersion :one
|
|
-- Creates a new EULA version
|
|
INSERT INTO eulaVersions (version, title, content, effectiveDate, createdBy)
|
|
VALUES ($1, $2, $3, $4, $5)
|
|
RETURNING id, version, title, content, effectiveDate, createdAt, createdBy, isCurrent, activatedAt, activatedBy;
|
|
|
|
-- name: GetEulaVersionById :one
|
|
-- Retrieves a specific EULA version by its ID
|
|
SELECT id, version, title, content, effectiveDate, createdAt, createdBy, isCurrent, activatedAt, activatedBy
|
|
FROM eulaVersions
|
|
WHERE id = $1;
|
|
|
|
-- name: GetCurrentEulaVersion :one
|
|
-- Retrieves the current active EULA version
|
|
SELECT id, version, title, content, effectiveDate, createdAt, createdBy, isCurrent, activatedAt, activatedBy
|
|
FROM eulaVersions
|
|
WHERE isCurrent = TRUE;
|
|
|
|
-- name: ListEulaVersions :many
|
|
-- Lists all EULA versions with pagination, ordered by createdAt descending
|
|
SELECT id, version, title, content, effectiveDate, createdAt, createdBy, isCurrent, activatedAt, activatedBy
|
|
FROM eulaVersions
|
|
ORDER BY createdAt DESC
|
|
LIMIT $1 OFFSET $2;
|
|
|
|
-- name: CountEulaVersions :one
|
|
-- Counts total number of EULA versions
|
|
SELECT COUNT(*) as total
|
|
FROM eulaVersions;
|
|
|
|
-- name: UpdateEulaVersionMetadata :one
|
|
-- Updates only the metadata (title and effectiveDate) of an EULA version
|
|
UPDATE eulaVersions
|
|
SET title = $2, effectiveDate = $3
|
|
WHERE id = $1
|
|
RETURNING id, version, title, content, effectiveDate, createdAt, createdBy, isCurrent, activatedAt, activatedBy;
|
|
|
|
-- name: ClearCurrentEulaVersions :exec
|
|
-- Clears the isCurrent flag from all versions (does not clear activatedAt/By for audit trail)
|
|
UPDATE eulaVersions
|
|
SET isCurrent = FALSE
|
|
WHERE isCurrent = TRUE;
|
|
|
|
-- name: SetEulaVersionCurrent :one
|
|
-- Sets a specific version as the current active version with audit fields
|
|
UPDATE eulaVersions
|
|
SET isCurrent = TRUE, activatedAt = NOW(), activatedBy = $2
|
|
WHERE id = $1
|
|
RETURNING id, version, title, content, effectiveDate, createdAt, createdBy, isCurrent, activatedAt, activatedBy;
|
|
|
|
-- name: CreateEulaAgreement :one
|
|
-- Records a user's agreement to an EULA version
|
|
INSERT INTO eulaAgreements (cognitoSubjectId, userEmail, eulaVersionId, agreedFromIp)
|
|
VALUES ($1, $2, $3, $4)
|
|
RETURNING id, cognitoSubjectId, userEmail, eulaVersionId, agreedAt, agreedFromIp;
|
|
|
|
-- name: GetUserEulaAgreement :one
|
|
-- Checks if a user has agreed to a specific EULA version
|
|
SELECT id, cognitoSubjectId, userEmail, eulaVersionId, agreedAt, agreedFromIp
|
|
FROM eulaAgreements
|
|
WHERE cognitoSubjectId = $1 AND eulaVersionId = $2;
|
|
|
|
-- name: GetUserCurrentEulaAgreement :one
|
|
-- Checks if a user has agreed to the current EULA version
|
|
SELECT a.id, a.cognitoSubjectId, a.userEmail, a.eulaVersionId, a.agreedAt, a.agreedFromIp
|
|
FROM eulaAgreements a
|
|
JOIN eulaVersions v ON a.eulaVersionId = v.id
|
|
WHERE a.cognitoSubjectId = $1 AND v.isCurrent = TRUE;
|
|
|
|
-- name: ListEulaAgreements :many
|
|
-- Lists agreements with optional filtering by version_id or user_id
|
|
-- Pass NULL for filters to skip them
|
|
SELECT a.id, a.cognitoSubjectId, a.userEmail, a.eulaVersionId, a.agreedAt, a.agreedFromIp,
|
|
v.version as eulaVersionString
|
|
FROM eulaAgreements a
|
|
JOIN eulaVersions v ON a.eulaVersionId = v.id
|
|
WHERE (sqlc.narg(version_id)::uuid IS NULL OR a.eulaVersionId = sqlc.narg(version_id)::uuid)
|
|
AND (sqlc.narg(user_id)::text IS NULL OR a.cognitoSubjectId = sqlc.narg(user_id)::text)
|
|
ORDER BY a.agreedAt DESC
|
|
LIMIT $1 OFFSET $2;
|
|
|
|
-- name: CountEulaAgreements :one
|
|
-- Counts agreements with optional filtering (matches ListEulaAgreements filters)
|
|
SELECT COUNT(*) as total
|
|
FROM eulaAgreements a
|
|
WHERE (sqlc.narg(version_id)::uuid IS NULL OR a.eulaVersionId = sqlc.narg(version_id)::uuid)
|
|
AND (sqlc.narg(user_id)::text IS NULL OR a.cognitoSubjectId = sqlc.narg(user_id)::text);
|
|
|
|
-- name: ListEulaAgreementsByUser :many
|
|
-- Gets all EULA versions a specific user has agreed to (user's complete history)
|
|
SELECT a.id, a.cognitoSubjectId, a.userEmail, a.eulaVersionId, a.agreedAt, a.agreedFromIp,
|
|
v.version as eulaVersionString, v.title as eulaVersionTitle
|
|
FROM eulaAgreements a
|
|
JOIN eulaVersions v ON a.eulaVersionId = v.id
|
|
WHERE a.cognitoSubjectId = $1
|
|
ORDER BY a.agreedAt DESC;
|
|
|
|
-- name: CountEulaAgreementsByVersion :one
|
|
-- Counts how many users have agreed to a specific EULA version
|
|
SELECT COUNT(*) as count
|
|
FROM eulaAgreements
|
|
WHERE eulaVersionId = $1;
|
|
|
|
-- name: ListAgreedUsersForVersion :many
|
|
-- Lists all users who have agreed to a specific EULA version
|
|
SELECT id, cognitoSubjectId, userEmail, eulaVersionId, agreedAt, agreedFromIp
|
|
FROM eulaAgreements
|
|
WHERE eulaVersionId = $1
|
|
ORDER BY agreedAt DESC
|
|
LIMIT $2 OFFSET $3;
|
|
|
|
-- name: ActivateLocalDevEulaVersion :one
|
|
-- Activates or updates the local development EULA version and makes it current.
|
|
WITH cleared AS (
|
|
UPDATE eulaVersions
|
|
SET isCurrent = FALSE
|
|
WHERE isCurrent = TRUE
|
|
),
|
|
upserted AS (
|
|
INSERT INTO eulaVersions (version, title, content, effectiveDate, createdBy, isCurrent, activatedAt, activatedBy)
|
|
VALUES (@version, @title, @content, NOW(), 'local-dev', TRUE, NOW(), 'local-dev')
|
|
ON CONFLICT (version) DO UPDATE
|
|
SET title = EXCLUDED.title,
|
|
content = EXCLUDED.content,
|
|
effectiveDate = EXCLUDED.effectiveDate,
|
|
isCurrent = TRUE,
|
|
activatedAt = NOW(),
|
|
activatedBy = EXCLUDED.activatedBy
|
|
RETURNING id
|
|
)
|
|
SELECT id FROM upserted;
|
|
|
|
-- name: CreateLocalDevEulaAgreement :exec
|
|
-- Records an idempotent local development EULA agreement.
|
|
INSERT INTO eulaAgreements (cognitoSubjectId, userEmail, eulaVersionId, agreedFromIp)
|
|
VALUES (@cognito_subject_id, @user_email, @eula_version_id, '127.0.0.1')
|
|
ON CONFLICT (cognitoSubjectId, eulaVersionId) DO NOTHING;
|