63c12a2f44
eula support * eula support * docs
111 lines
4.4 KiB
SQL
111 lines
4.4 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;
|