feat(M09-D3): 完成商品寄存与安全取出闭环
This commit is contained in:
@@ -138,6 +138,15 @@ const productOrderPaymentDownSql = read(
|
||||
const productOrderPaymentVerifySql = read(
|
||||
'database/migrations/2026081108_m09d2_product_order_payment_inventory.verify.sql'
|
||||
);
|
||||
const productStorageUpSql = read(
|
||||
'database/migrations/2026081109_m09d3_product_storage.up.sql'
|
||||
);
|
||||
const productStorageDownSql = read(
|
||||
'database/migrations/2026081109_m09d3_product_storage.down.sql'
|
||||
);
|
||||
const productStorageVerifySql = read(
|
||||
'database/migrations/2026081109_m09d3_product_storage.verify.sql'
|
||||
);
|
||||
|
||||
const coreTables = [
|
||||
'qipai_schema_migrations',
|
||||
@@ -684,4 +693,38 @@ assert.match(productOrderPaymentUpSql, /r\.code IN \('STAFF', 'STORE_ADMIN', 'TE
|
||||
assert.match(productOrderPaymentVerifySql, /fully_granted_goods_order_roles/);
|
||||
assert.match(productOrderPaymentVerifySql, /'2026081108'/);
|
||||
|
||||
console.log('PASS: M01-B through M09-D2 migration contracts are present.');
|
||||
for (const table of [
|
||||
'qipai_product_storage_records',
|
||||
'qipai_product_storage_items',
|
||||
'qipai_product_storage_events',
|
||||
'qipai_product_storage_event_items'
|
||||
]) {
|
||||
assert.match(productStorageUpSql, new RegExp(`CREATE TABLE IF NOT EXISTS ${table}\\b`));
|
||||
assert.match(productStorageDownSql, new RegExp(`DROP TABLE IF EXISTS ${table}\\b`));
|
||||
assert.match(productStorageVerifySql, new RegExp(`'${table}'`));
|
||||
}
|
||||
assert.doesNotMatch(productStorageUpSql, /\bDECIMAL\b/i);
|
||||
for (const state of [
|
||||
'STORED', 'PARTIALLY_RETRIEVED', 'RETRIEVED', 'EXPIRED', 'CANCELLED'
|
||||
]) assert.match(productStorageUpSql, new RegExp(`'${state}'`));
|
||||
assert.match(productStorageUpSql, /claim_credential_hash CHAR\(64\) CHARACTER SET ascii COLLATE ascii_bin/);
|
||||
assert.match(productStorageUpSql, /request_fingerprint CHAR\(64\) CHARACTER SET ascii COLLATE ascii_bin/);
|
||||
assert.match(productStorageUpSql, /remaining_quantity <= total_quantity/);
|
||||
assert.match(productStorageUpSql, /uq_qipai_product_storage_source_order/);
|
||||
assert.match(productStorageUpSql, /uq_qipai_product_storage_event_request/);
|
||||
assert.match(productStorageUpSql, /uq_qipai_product_storage_event_version/);
|
||||
assert.match(productStorageUpSql, /qipai_product_storage_events_no_update/);
|
||||
assert.match(productStorageUpSql, /qipai_product_storage_events_no_delete/);
|
||||
assert.match(productStorageUpSql, /qipai_product_storage_event_items_no_update/);
|
||||
assert.match(productStorageUpSql, /qipai_product_storage_event_items_no_delete/);
|
||||
for (const permission of ['goods.storage.read', 'goods.storage.manage']) {
|
||||
const pattern = new RegExp(permission.replace('.', '\\.'));
|
||||
assert.match(productStorageUpSql, pattern);
|
||||
assert.match(productStorageDownSql, pattern);
|
||||
assert.match(productStorageVerifySql, pattern);
|
||||
}
|
||||
assert.match(productStorageUpSql, /r\.code IN \('STAFF', 'STORE_ADMIN', 'TENANT_ADMIN', 'PLATFORM_ADMIN'\)/);
|
||||
assert.match(productStorageVerifySql, /fully_granted_goods_storage_roles/);
|
||||
assert.match(productStorageVerifySql, /'2026081109'/);
|
||||
|
||||
console.log('PASS: M01-B through M09-D3 migration contracts are present.');
|
||||
|
||||
Reference in New Issue
Block a user