40 lines
1.9 KiB
SQL
40 lines
1.9 KiB
SQL
-- ============================================================
|
||||
|
|
-- E2E 服务预约前置数据 seed(幂等,本机与 CI 通用)
|
|||
|
|
--
|
|||
|
|
-- 为什么需要(两个缺一不可的原因):
|
|||
|
|
-- 1. 全新库里 `service_locations` 是**空表** —— 没有任何迁移种站点,
|
|||
|
|
-- 本机那两个站(含旧脚本留下的「E2E 预约测试站」)都是手工产物。
|
|||
|
|
-- 没有站点就没有 serviceLocationId,预约根本创建不了。
|
|||
|
|
-- 2. 运营确认/完成/取消受**数据范围**约束,不是「有权限就行」:
|
|||
|
|
-- `ServiceAppointmentService.assertOperatorScope` 走
|
|||
|
|
-- `canAccessByOperator`,条件为
|
|||
|
|
-- sa.assigned_operator_id = :operatorId
|
|||
|
|
-- OR EXISTS(service_location_operators 中该站点关联了 :operatorId)
|
|||
|
|
-- —— super_admin 也**不豁免**(实测 e2e_admin 确认预约返回 403)。
|
|||
|
|
-- 因此必须显式建立「站点 → 运营」关联。
|
|||
|
|
--
|
|||
|
|
-- 关联的运营是 seed_e2e_operators.sql 建的 `e2e_station`(service_station_operator),
|
|||
|
|
-- 它同时持有 service_location.view 与 service_appointment.confirm / .complete。
|
|||
|
|
--
|
|||
|
|
-- 幂等:全部 ON CONFLICT DO NOTHING,可重复执行。
|
|||
|
|
-- 固定 UUID:测试按常量引用(见 service_appointment_test.py 的 E2E_STATION_ID)。
|
|||
|
|
-- ============================================================
|
|||
|
|
|
|||
|
|
INSERT INTO service_locations (id, name, short_name, address, status)
|
|||
|
|
VALUES (
|
|||
|
|
'e2e00000-0000-0000-0000-0000000000b1',
|
|||
|
|
'E2E 预约测试服务站',
|
|||
|
|
'E2E 服务站',
|
|||
|
|
'E2E 测试地址(仅预约用例使用)',
|
|||
|
|
'active'
|
|||
|
|
)
|
|||
|
|
ON CONFLICT (id) DO NOTHING;
|
|||
|
|
|
|||
|
|
INSERT INTO service_location_operators (service_location_id, operator_id, created_by)
|
|||
|
|
VALUES (
|
|||
|
|
'e2e00000-0000-0000-0000-0000000000b1',
|
|||
|
|
'e2e00000-0000-0000-0000-000000000004', -- e2e_station
|
|||
|
|
'e2e00000-0000-0000-0000-000000000001' -- e2e_admin(created_by 仅审计)
|
|||
|
|
)
|
|||
|
|
ON CONFLICT (service_location_id, operator_id) DO NOTHING;
|