54 lines
1.7 KiB
SQL
54 lines
1.7 KiB
SQL
-- +goose Up
|
|||
|
|
CREATE TABLE evidence_assets (
|
||
|
|
id TEXT PRIMARY KEY,
|
||
|
|
upload_key TEXT NOT NULL,
|
||
|
|
task_id TEXT NOT NULL,
|
||
|
|
attempt_id TEXT NOT NULL,
|
||
|
|
kind TEXT NOT NULL CHECK (kind = 'SKU_PANEL_GATE_1'),
|
||
|
|
privacy_tier TEXT NOT NULL CHECK (privacy_tier = 'INTERNAL_RAW'),
|
||
|
|
sha256 TEXT NOT NULL CHECK (
|
||
|
|
length(sha256) = 64
|
||
|
|
AND sha256 NOT GLOB '*[^0-9a-f]*'
|
||
|
|
),
|
||
|
|
byte_size INTEGER NOT NULL CHECK (
|
||
|
|
typeof(byte_size) = 'integer'
|
||
|
|
AND byte_size > 0
|
||
|
|
AND byte_size <= 10485760
|
||
|
|
),
|
||
|
|
content_type TEXT NOT NULL CHECK (content_type = 'image/png'),
|
||
|
|
width_px INTEGER NOT NULL CHECK (
|
||
|
|
typeof(width_px) = 'integer'
|
||
|
|
AND width_px > 0
|
||
|
|
AND width_px <= 8192
|
||
|
|
),
|
||
|
|
height_px INTEGER NOT NULL CHECK (
|
||
|
|
typeof(height_px) = 'integer'
|
||
|
|
AND height_px > 0
|
||
|
|
AND height_px <= 8192
|
||
|
|
),
|
||
|
|
storage_key TEXT NOT NULL CHECK (
|
||
|
|
storage_key = substr(sha256, 1, 2) || '/' || sha256 || '.png'
|
||
|
|
),
|
||
|
|
uploaded_by_device_id TEXT NOT NULL CHECK (trim(uploaded_by_device_id) <> ''),
|
||
|
|
captured_at TEXT NOT NULL CHECK (trim(captured_at) <> ''),
|
||
|
|
created_at TEXT NOT NULL CHECK (trim(created_at) <> ''),
|
||
|
|
CHECK (width_px * height_px <= 16777216),
|
||
|
|
UNIQUE (uploaded_by_device_id, upload_key),
|
||
|
|
FOREIGN KEY (task_id, attempt_id) REFERENCES purchase_attempts(task_id, id)
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE INDEX evidence_assets_task_time_idx
|
||
|
|
ON evidence_assets (task_id, captured_at, created_at, id);
|
||
|
|
|
||
|
|
-- +goose Down
|
||
|
|
-- 已写入的内部原图是审计事实,回滚迁移不得静默删除它们。
|
||
|
|
CREATE TABLE evidence_downgrade_guard (
|
||
|
|
valid INTEGER NOT NULL CHECK (valid = 1)
|
||
|
|
);
|
||
|
|
|
||
|
|
INSERT INTO evidence_downgrade_guard (valid)
|
||
|
|
SELECT CASE WHEN (SELECT COUNT(*) FROM evidence_assets) = 0 THEN 1 ELSE 0 END;
|
||
|
|
|
||
|
|
DROP TABLE evidence_downgrade_guard;
|
||
|
|
DROP TABLE evidence_assets;
|