Release / update-version (push) Has been cancelled
Release / build-frontend (push) Has been cancelled
Release / release (push) Has been cancelled
Release / sync-version-file (push) Has been cancelled
CI / shell (push) Canceled after 0s
CI / test (push) Canceled after 0s
CI / frontend (push) Canceled after 0s
CI / golangci-lint (push) Canceled after 0s
Security Scan / backend-security (push) Canceled after 0s
Security Scan / frontend-security (push) Canceled after 0s
48 lines
2.1 KiB
PL/PgSQL
48 lines
2.1 KiB
PL/PgSQL
-- Profit-control fields are part of the API-key auth snapshot and gate the
|
|
-- scheduling admission filter; the profit threshold D additionally depends on
|
|
-- group pricing and peak-window fields. Extend the durable invalidation
|
|
-- trigger so out-of-band group edits (direct SQL, crash between update and
|
|
-- app-level invalidation) cannot leave cached snapshots using stale
|
|
-- profit-control inputs. Normal admin saves already invalidate via
|
|
-- InvalidateAuthCacheByGroupID; this trigger is the durable backstop. Based on
|
|
-- the latest function body from 186_group_auth_cache_image_generation.sql.
|
|
|
|
CREATE OR REPLACE FUNCTION enqueue_group_auth_cache_invalidation()
|
|
RETURNS TRIGGER
|
|
LANGUAGE plpgsql
|
|
AS $$
|
|
DECLARE
|
|
target_group_id BIGINT;
|
|
BEGIN
|
|
target_group_id := OLD.id;
|
|
IF TG_OP = 'UPDATE'
|
|
AND OLD.status IS NOT DISTINCT FROM NEW.status
|
|
AND OLD.is_exclusive IS NOT DISTINCT FROM NEW.is_exclusive
|
|
AND OLD.allow_image_generation IS NOT DISTINCT FROM NEW.allow_image_generation
|
|
AND OLD.platform IS NOT DISTINCT FROM NEW.platform
|
|
AND OLD.subscription_type IS NOT DISTINCT FROM NEW.subscription_type
|
|
AND OLD.rate_multiplier IS NOT DISTINCT FROM NEW.rate_multiplier
|
|
AND OLD.peak_rate_enabled IS NOT DISTINCT FROM NEW.peak_rate_enabled
|
|
AND OLD.peak_start IS NOT DISTINCT FROM NEW.peak_start
|
|
AND OLD.peak_end IS NOT DISTINCT FROM NEW.peak_end
|
|
AND OLD.peak_rate_multiplier IS NOT DISTINCT FROM NEW.peak_rate_multiplier
|
|
AND OLD.profit_control_enabled IS NOT DISTINCT FROM NEW.profit_control_enabled
|
|
AND OLD.profit_min_margin IS NOT DISTINCT FROM NEW.profit_min_margin
|
|
AND OLD.profit_safety_buffer IS NOT DISTINCT FROM NEW.profit_safety_buffer
|
|
AND OLD.deleted_at IS NOT DISTINCT FROM NEW.deleted_at THEN
|
|
RETURN NEW;
|
|
END IF;
|
|
|
|
INSERT INTO auth_cache_invalidation_outbox (cache_key)
|
|
SELECT encode(sha256(convert_to(k.key, 'UTF8')), 'hex')
|
|
FROM api_keys AS k
|
|
WHERE k.group_id = target_group_id
|
|
AND k.deleted_at IS NULL
|
|
AND k.key <> '';
|
|
IF TG_OP = 'DELETE' THEN
|
|
RETURN OLD;
|
|
END IF;
|
|
RETURN NEW;
|
|
END;
|
|
$$;
|