Files
OSGAccountServer/src/main/resources/db/migration/V6__gateway_execution_state.sql
T
Rocky 0af35d44f4 Establish secure account and managed AI backend
Provide the production foundation for Apple identity, immutable credits, referrals, integrity checks, managed providers, and hardened Docker deployment.
2026-08-16 14:46:23 +08:00

66 lines
2.7 KiB
SQL

-- Make client request IDs idempotent within an account, not globally.
ALTER TABLE usage_records
DROP FOREIGN KEY fk_usage_records_provider_request,
DROP INDEX uq_usage_records_request_meter,
ADD COLUMN account_id VARCHAR(36) CHARACTER SET ascii COLLATE ascii_bin NULL AFTER id;
UPDATE usage_records ur
JOIN provider_requests pr ON pr.request_id = ur.request_id
SET ur.account_id = pr.account_id;
ALTER TABLE usage_records
MODIFY account_id VARCHAR(36) CHARACTER SET ascii COLLATE ascii_bin NOT NULL;
-- Normalize every legacy value before installing the binary status column and
-- stricter CHECK. Unknown historical states are held for manual review rather
-- than making a non-transactional MySQL migration fail halfway through.
UPDATE provider_requests
SET status = CASE UPPER(status)
WHEN 'SUCCEEDED' THEN 'SETTLED'
WHEN 'FAILED' THEN 'MANUAL_REVIEW'
WHEN 'CLAIMED' THEN 'CLAIMED'
WHEN 'STARTED' THEN 'STARTED'
WHEN 'SETTLEMENT_PENDING' THEN 'SETTLEMENT_PENDING'
WHEN 'SETTLED' THEN 'SETTLED'
WHEN 'RELEASED' THEN 'RELEASED'
WHEN 'MANUAL_REVIEW' THEN 'MANUAL_REVIEW'
ELSE 'MANUAL_REVIEW'
END;
ALTER TABLE provider_requests
ADD COLUMN reservation_id CHAR(36) NULL AFTER account_id,
ADD COLUMN usage_meter VARCHAR(32) NULL AFTER provider_request_id,
ADD COLUMN usage_units BIGINT UNSIGNED NULL AFTER usage_meter,
ADD COLUMN usage_input_units BIGINT UNSIGNED NULL AFTER usage_units,
ADD COLUMN usage_output_units BIGINT UNSIGNED NULL AFTER usage_input_units,
MODIFY COLUMN status VARCHAR(24) CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
DROP PRIMARY KEY,
ADD PRIMARY KEY (account_id, request_id),
ADD UNIQUE KEY uq_provider_requests_reservation (reservation_id),
ADD INDEX idx_provider_requests_status_created (status, created_at),
ADD CONSTRAINT chk_provider_request_status CHECK (
status IN (
'CLAIMED',
'STARTED',
'SETTLEMENT_PENDING',
'SETTLED',
'RELEASED',
'MANUAL_REVIEW'
)
);
ALTER TABLE usage_records
ADD UNIQUE KEY uq_usage_records_account_request_meter (account_id, request_id, meter),
ADD CONSTRAINT fk_usage_records_provider_request
FOREIGN KEY (account_id, request_id)
REFERENCES provider_requests (account_id, request_id)
ON DELETE CASCADE;
-- A rotated refresh row points to its replacement. RESTRICT can block the
-- account -> grant -> refresh cascade when an account is deleted.
ALTER TABLE gateway_refresh_tokens
DROP FOREIGN KEY fk_gateway_refresh_replacement,
ADD CONSTRAINT fk_gateway_refresh_replacement
FOREIGN KEY (replaced_by_id) REFERENCES gateway_refresh_tokens (id)
ON DELETE SET NULL;