62 lines
1.9 KiB
SQL
62 lines
1.9 KiB
SQL
-- +goose Up
|
|
CREATE TABLE procurement_reference_sources (
|
|
procurement_request_id TEXT PRIMARY KEY NOT NULL
|
|
REFERENCES procurement_requests(id)
|
|
ON UPDATE RESTRICT ON DELETE RESTRICT,
|
|
origin TEXT NOT NULL
|
|
CHECK (origin IN ('ERP_FREIGHT_IMAGE', 'MANUAL_UPLOAD')),
|
|
product_thumb_ref TEXT
|
|
CHECK (
|
|
product_thumb_ref IS NULL
|
|
OR (
|
|
product_thumb_ref GLOB '[1-9]*'
|
|
AND product_thumb_ref NOT GLOB '*[^0-9]*'
|
|
AND length(product_thumb_ref) <= 20
|
|
)
|
|
),
|
|
source_image_sha256 TEXT
|
|
CHECK (
|
|
source_image_sha256 IS NULL
|
|
OR (
|
|
length(source_image_sha256) = 64
|
|
AND source_image_sha256 NOT GLOB '*[^0-9a-f]*'
|
|
)
|
|
),
|
|
bound_at TEXT NOT NULL,
|
|
CHECK (
|
|
(origin = 'ERP_FREIGHT_IMAGE'
|
|
AND product_thumb_ref IS NOT NULL
|
|
AND source_image_sha256 IS NOT NULL)
|
|
OR (origin = 'MANUAL_UPLOAD'
|
|
AND product_thumb_ref IS NULL
|
|
AND source_image_sha256 IS NULL)
|
|
)
|
|
);
|
|
|
|
INSERT INTO procurement_reference_sources (
|
|
procurement_request_id, origin, product_thumb_ref,
|
|
source_image_sha256, bound_at
|
|
)
|
|
SELECT id, 'MANUAL_UPLOAD', NULL, NULL, updated_at
|
|
FROM procurement_requests
|
|
WHERE reference_asset_id IS NOT NULL;
|
|
|
|
CREATE INDEX procurement_reference_sources_origin_idx
|
|
ON procurement_reference_sources (origin, bound_at, procurement_request_id);
|
|
|
|
-- +goose Down
|
|
CREATE TEMP TABLE procurement_reference_sources_v17_down_guard (
|
|
allowed INTEGER NOT NULL CHECK (allowed = 1)
|
|
);
|
|
|
|
INSERT INTO procurement_reference_sources_v17_down_guard (allowed)
|
|
SELECT CASE
|
|
WHEN EXISTS (SELECT 1 FROM procurement_reference_sources)
|
|
THEN 0
|
|
ELSE 1
|
|
END;
|
|
|
|
DROP TABLE procurement_reference_sources_v17_down_guard;
|
|
DROP INDEX procurement_reference_sources_origin_idx;
|
|
DROP TABLE procurement_reference_sources;
|