feat(M04-D): 完成最小权限订单分享

This commit is contained in:
Codex
2026-06-20 14:20:37 +08:00
parent 3c5cf071b9
commit 91801fe6a7
17 changed files with 694 additions and 14 deletions
@@ -0,0 +1,2 @@
DELETE FROM qipai_schema_migrations WHERE version = '2026062014';
DROP TABLE IF EXISTS qipai_order_shares;
@@ -0,0 +1,31 @@
CREATE TABLE IF NOT EXISTS qipai_order_shares (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
tenant_id BIGINT UNSIGNED NOT NULL,
order_id BIGINT UNSIGNED NOT NULL,
token_hash CHAR(64) NOT NULL,
token_prefix VARCHAR(12) NOT NULL,
allow_view_room TINYINT(1) NOT NULL DEFAULT 1,
allow_open_door TINYINT(1) NOT NULL DEFAULT 1,
allow_renew TINYINT(1) NOT NULL DEFAULT 0,
expires_at DATETIME(3) NOT NULL,
created_by BIGINT UNSIGNED NOT NULL,
revoked_at DATETIME(3) NULL,
revoked_by BIGINT UNSIGNED NULL,
last_used_at DATETIME(3) NULL,
use_count BIGINT UNSIGNED NOT NULL DEFAULT 0,
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
CONSTRAINT fk_qipai_order_share_tenant
FOREIGN KEY (tenant_id) REFERENCES qipai_tenants(id),
CONSTRAINT fk_qipai_order_share_order
FOREIGN KEY (order_id) REFERENCES qipai_orders(id),
CONSTRAINT fk_qipai_order_share_creator
FOREIGN KEY (created_by) REFERENCES qipai_users(id),
CONSTRAINT fk_qipai_order_share_revoker
FOREIGN KEY (revoked_by) REFERENCES qipai_users(id),
UNIQUE KEY uq_qipai_order_share_token_hash (token_hash),
KEY idx_qipai_order_share_order (tenant_id, order_id, revoked_at, expires_at),
KEY idx_qipai_order_share_expiry (expires_at, revoked_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT IGNORE INTO qipai_schema_migrations (version, name)
VALUES ('2026062014', 'm04d_order_shares');
@@ -0,0 +1,21 @@
SELECT table_name FROM information_schema.tables
WHERE table_schema = DATABASE() AND table_name = 'qipai_order_shares';
SELECT column_name FROM information_schema.columns
WHERE table_schema = DATABASE() AND table_name = 'qipai_order_shares'
AND column_name IN (
'token_hash', 'allow_view_room', 'allow_open_door', 'allow_renew',
'expires_at', 'revoked_at', 'last_used_at', 'use_count'
)
ORDER BY column_name;
SELECT index_name FROM information_schema.statistics
WHERE table_schema = DATABASE() AND table_name = 'qipai_order_shares'
AND index_name IN (
'uq_qipai_order_share_token_hash',
'idx_qipai_order_share_order',
'idx_qipai_order_share_expiry'
)
GROUP BY index_name ORDER BY index_name;
SELECT version, name FROM qipai_schema_migrations WHERE version = '2026062014';