149 lines
5.3 KiB
SQL
149 lines
5.3 KiB
SQL
-- +goose Up
|
|||
|
|
CREATE TABLE tasks (
|
||
|
|
id TEXT PRIMARY KEY,
|
||
|
|
source TEXT NOT NULL CHECK (source IN ('MANUAL', 'EXCEL', 'ERP')),
|
||
|
|
source_ref TEXT,
|
||
|
|
title TEXT NOT NULL,
|
||
|
|
goods_id TEXT NOT NULL,
|
||
|
|
sku_color TEXT NOT NULL,
|
||
|
|
sku_size TEXT NOT NULL,
|
||
|
|
quantity INTEGER NOT NULL CHECK (quantity > 0 AND typeof(quantity) = 'integer'),
|
||
|
|
max_total_price TEXT NOT NULL CHECK (
|
||
|
|
max_total_price <> ''
|
||
|
|
AND max_total_price NOT GLOB '*[^0-9.]*'
|
||
|
|
AND length(max_total_price) - length(replace(max_total_price, '.', '')) <= 1
|
||
|
|
AND max_total_price <> '.'
|
||
|
|
AND (instr(max_total_price, '.') = 0 OR (
|
||
|
|
instr(max_total_price, '.') > 1
|
||
|
|
AND length(max_total_price) > instr(max_total_price, '.')
|
||
|
|
))
|
||
|
|
),
|
||
|
|
reference_asset_id TEXT,
|
||
|
|
status TEXT NOT NULL CHECK (status IN (
|
||
|
|
'DRAFT', 'PENDING', 'CLAIMED', 'RUNNING', 'WAITING_CONFIRMATION',
|
||
|
|
'PENDING_RETRIAL', 'AUTHORIZED', 'ORDERING', 'WAITING_PAYMENT',
|
||
|
|
'RECONCILIATION_REQUIRED', 'NEEDS_MANUAL', 'SUCCEEDED', 'CANCELED'
|
||
|
|
)),
|
||
|
|
version INTEGER NOT NULL DEFAULT 1 CHECK (version > 0 AND typeof(version) = 'integer'),
|
||
|
|
created_at TEXT NOT NULL,
|
||
|
|
updated_at TEXT NOT NULL
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE TABLE spec_trials (
|
||
|
|
id TEXT PRIMARY KEY,
|
||
|
|
task_id TEXT NOT NULL REFERENCES tasks(id),
|
||
|
|
attempt INTEGER NOT NULL CHECK (attempt > 0 AND typeof(attempt) = 'integer'),
|
||
|
|
product_title TEXT NOT NULL,
|
||
|
|
selected_color TEXT NOT NULL,
|
||
|
|
selected_size TEXT NOT NULL,
|
||
|
|
unit_price TEXT NOT NULL CHECK (
|
||
|
|
unit_price <> ''
|
||
|
|
AND unit_price NOT GLOB '*[^0-9.]*'
|
||
|
|
AND length(unit_price) - length(replace(unit_price, '.', '')) <= 1
|
||
|
|
AND unit_price <> '.'
|
||
|
|
AND (instr(unit_price, '.') = 0 OR (
|
||
|
|
instr(unit_price, '.') > 1
|
||
|
|
AND length(unit_price) > instr(unit_price, '.')
|
||
|
|
))
|
||
|
|
),
|
||
|
|
total_price TEXT NOT NULL CHECK (
|
||
|
|
total_price <> ''
|
||
|
|
AND total_price NOT GLOB '*[^0-9.]*'
|
||
|
|
AND length(total_price) - length(replace(total_price, '.', '')) <= 1
|
||
|
|
AND total_price <> '.'
|
||
|
|
AND (instr(total_price, '.') = 0 OR (
|
||
|
|
instr(total_price, '.') > 1
|
||
|
|
AND length(total_price) > instr(total_price, '.')
|
||
|
|
))
|
||
|
|
),
|
||
|
|
evidence_sha256 TEXT NOT NULL,
|
||
|
|
created_at TEXT NOT NULL,
|
||
|
|
UNIQUE (task_id, attempt),
|
||
|
|
UNIQUE (task_id, id)
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE TABLE order_authorizations (
|
||
|
|
id TEXT PRIMARY KEY,
|
||
|
|
task_id TEXT NOT NULL REFERENCES tasks(id),
|
||
|
|
spec_trial_id TEXT NOT NULL REFERENCES spec_trials(id),
|
||
|
|
version INTEGER NOT NULL CHECK (version > 0 AND typeof(version) = 'integer'),
|
||
|
|
goods_id TEXT NOT NULL,
|
||
|
|
sku_color TEXT NOT NULL,
|
||
|
|
sku_size TEXT NOT NULL,
|
||
|
|
quantity INTEGER NOT NULL CHECK (quantity > 0 AND typeof(quantity) = 'integer'),
|
||
|
|
authorized_unit_price TEXT NOT NULL CHECK (
|
||
|
|
authorized_unit_price <> ''
|
||
|
|
AND authorized_unit_price NOT GLOB '*[^0-9.]*'
|
||
|
|
AND length(authorized_unit_price) - length(replace(authorized_unit_price, '.', '')) <= 1
|
||
|
|
AND authorized_unit_price <> '.'
|
||
|
|
AND (instr(authorized_unit_price, '.') = 0 OR (
|
||
|
|
instr(authorized_unit_price, '.') > 1
|
||
|
|
AND length(authorized_unit_price) > instr(authorized_unit_price, '.')
|
||
|
|
))
|
||
|
|
),
|
||
|
|
total_price_cap TEXT NOT NULL CHECK (
|
||
|
|
total_price_cap <> ''
|
||
|
|
AND total_price_cap NOT GLOB '*[^0-9.]*'
|
||
|
|
AND length(total_price_cap) - length(replace(total_price_cap, '.', '')) <= 1
|
||
|
|
AND total_price_cap <> '.'
|
||
|
|
AND (instr(total_price_cap, '.') = 0 OR (
|
||
|
|
instr(total_price_cap, '.') > 1
|
||
|
|
AND length(total_price_cap) > instr(total_price_cap, '.')
|
||
|
|
))
|
||
|
|
),
|
||
|
|
note TEXT,
|
||
|
|
status TEXT NOT NULL CHECK (status IN (
|
||
|
|
'PENDING_DELIVERY', 'DELIVERED', 'ACKNOWLEDGED', 'EXECUTING', 'FENCED',
|
||
|
|
'CONSUMED', 'SUPERSEDED', 'EXPIRED'
|
||
|
|
)),
|
||
|
|
created_by TEXT NOT NULL,
|
||
|
|
created_at TEXT NOT NULL,
|
||
|
|
expires_at TEXT NOT NULL,
|
||
|
|
UNIQUE (task_id, version),
|
||
|
|
UNIQUE (task_id, id),
|
||
|
|
FOREIGN KEY (task_id, spec_trial_id) REFERENCES spec_trials(task_id, id)
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE TABLE order_submissions (
|
||
|
|
id TEXT PRIMARY KEY,
|
||
|
|
task_id TEXT NOT NULL REFERENCES tasks(id),
|
||
|
|
authorization_id TEXT NOT NULL REFERENCES order_authorizations(id),
|
||
|
|
command_id TEXT NOT NULL,
|
||
|
|
dry_run_id TEXT NOT NULL,
|
||
|
|
status TEXT NOT NULL CHECK (status IN (
|
||
|
|
'FENCED', 'SUBMITTED', 'RECONCILIATION_REQUIRED', 'MANUAL_RESOLVED'
|
||
|
|
)),
|
||
|
|
verified_unit_price TEXT NOT NULL CHECK (
|
||
|
|
verified_unit_price <> ''
|
||
|
|
AND verified_unit_price NOT GLOB '*[^0-9.]*'
|
||
|
|
AND length(verified_unit_price) - length(replace(verified_unit_price, '.', '')) <= 1
|
||
|
|
AND verified_unit_price <> '.'
|
||
|
|
AND (instr(verified_unit_price, '.') = 0 OR (
|
||
|
|
instr(verified_unit_price, '.') > 1
|
||
|
|
AND length(verified_unit_price) > instr(verified_unit_price, '.')
|
||
|
|
))
|
||
|
|
),
|
||
|
|
quantity_read INTEGER NOT NULL CHECK (quantity_read > 0 AND typeof(quantity_read) = 'integer'),
|
||
|
|
confirm_page_amount TEXT NOT NULL CHECK (
|
||
|
|
confirm_page_amount <> ''
|
||
|
|
AND confirm_page_amount NOT GLOB '*[^0-9.]*'
|
||
|
|
AND length(confirm_page_amount) - length(replace(confirm_page_amount, '.', '')) <= 1
|
||
|
|
AND confirm_page_amount <> '.'
|
||
|
|
AND (instr(confirm_page_amount, '.') = 0 OR (
|
||
|
|
instr(confirm_page_amount, '.') > 1
|
||
|
|
AND length(confirm_page_amount) > instr(confirm_page_amount, '.')
|
||
|
|
))
|
||
|
|
),
|
||
|
|
created_at TEXT NOT NULL,
|
||
|
|
resolved_at TEXT,
|
||
|
|
UNIQUE (authorization_id),
|
||
|
|
UNIQUE (command_id),
|
||
|
|
FOREIGN KEY (task_id, authorization_id) REFERENCES order_authorizations(task_id, id)
|
||
|
|
);
|
||
|
|
|
||
|
|
-- +goose Down
|
||
|
|
DROP TABLE order_submissions;
|
||
|
|
DROP TABLE order_authorizations;
|
||
|
|
DROP TABLE spec_trials;
|
||
|
|
DROP TABLE tasks;
|