690417:1538 Refactor Work flow ADR-021
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
-- ==========================================================
|
||||
-- Delta 06: Add CIRCULATION_FLOW_V1 Workflow Definition
|
||||
-- ==========================================================
|
||||
-- Purpose : สร้าง Workflow Definition สำหรับใบเวียนภายใน (Circulation)
|
||||
-- Required : ก่อน delta นี้ ตาราง workflow_definitions ต้องมีอยู่แล้ว (ADR-001)
|
||||
-- Renamed : CIRCULATION_INTERNAL_V1 → CIRCULATION_FLOW_V1 (ตาม naming convention)
|
||||
-- States :
|
||||
-- DRAFT (initial) → START → ROUTING
|
||||
-- ROUTING → COMPLETE → COMPLETED (terminal)
|
||||
-- ROUTING → FORCE_CLOSE → CANCELLED (terminal)
|
||||
-- ==========================================================
|
||||
|
||||
INSERT INTO `workflow_definitions` (
|
||||
`id`,
|
||||
`workflow_code`,
|
||||
`version`,
|
||||
`description`,
|
||||
`dsl`,
|
||||
`compiled`,
|
||||
`is_active`,
|
||||
`created_at`,
|
||||
`updated_at`
|
||||
)
|
||||
VALUES (
|
||||
UUID(),
|
||||
'CIRCULATION_FLOW_V1',
|
||||
1,
|
||||
'Circulation Workflow — DRAFT → ROUTING → COMPLETED | CANCELLED',
|
||||
JSON_OBJECT(
|
||||
'workflow', 'CIRCULATION_FLOW_V1',
|
||||
'version', 1,
|
||||
'states', JSON_ARRAY(
|
||||
JSON_OBJECT(
|
||||
'name', 'DRAFT',
|
||||
'initial', TRUE,
|
||||
'on', JSON_OBJECT(
|
||||
'START', JSON_OBJECT('to', 'ROUTING')
|
||||
)
|
||||
),
|
||||
JSON_OBJECT(
|
||||
'name', 'ROUTING',
|
||||
'on', JSON_OBJECT(
|
||||
'COMPLETE', JSON_OBJECT('to', 'COMPLETED'),
|
||||
'FORCE_CLOSE', JSON_OBJECT('to', 'CANCELLED')
|
||||
)
|
||||
),
|
||||
JSON_OBJECT('name', 'COMPLETED', 'terminal', TRUE),
|
||||
JSON_OBJECT('name', 'CANCELLED', 'terminal', TRUE)
|
||||
)
|
||||
),
|
||||
JSON_OBJECT(
|
||||
'initialState', 'DRAFT',
|
||||
'states', JSON_OBJECT(
|
||||
'DRAFT', JSON_OBJECT(
|
||||
'initial', TRUE,
|
||||
'terminal', FALSE,
|
||||
'transitions', JSON_OBJECT(
|
||||
'START', JSON_OBJECT('to', 'ROUTING', 'events', JSON_ARRAY())
|
||||
)
|
||||
),
|
||||
'ROUTING', JSON_OBJECT(
|
||||
'initial', FALSE,
|
||||
'terminal', FALSE,
|
||||
'transitions', JSON_OBJECT(
|
||||
'COMPLETE', JSON_OBJECT('to', 'COMPLETED', 'events', JSON_ARRAY()),
|
||||
'FORCE_CLOSE', JSON_OBJECT('to', 'CANCELLED', 'events', JSON_ARRAY())
|
||||
)
|
||||
),
|
||||
'COMPLETED', JSON_OBJECT(
|
||||
'initial', FALSE,
|
||||
'terminal', TRUE,
|
||||
'transitions', JSON_OBJECT()
|
||||
),
|
||||
'CANCELLED', JSON_OBJECT(
|
||||
'initial', FALSE,
|
||||
'terminal', TRUE,
|
||||
'transitions', JSON_OBJECT()
|
||||
)
|
||||
)
|
||||
),
|
||||
TRUE,
|
||||
NOW(),
|
||||
NOW()
|
||||
);
|
||||
|
||||
-- Verify
|
||||
-- SELECT workflow_code, version, is_active FROM workflow_definitions WHERE workflow_code = 'CIRCULATION_FLOW_V1';
|
||||
@@ -0,0 +1,22 @@
|
||||
-- ==========================================================
|
||||
-- Delta 07: Add contract_id to workflow_instances (C3 Contract Scoping)
|
||||
-- ==========================================================
|
||||
-- Purpose : เพิ่ม contract_id FK ใน workflow_instances เพื่อให้ Workflow Engine
|
||||
-- แยก scope ตาม Contract ได้ (C3 ตาม analysis ADR-021)
|
||||
-- Why : RFA / Correspondence / Transmittal → contract-scoped (contractId ถูกตั้ง)
|
||||
-- Circulation → organization-scoped (contractId = NULL, ใช้ Level 2 org check)
|
||||
-- Guard Level 2.5 ตรวจ contract_organizations membership เฉพาะ contractId ≠ NULL
|
||||
-- ADR : ADR-009 (no migrations — direct SQL only)
|
||||
-- ==========================================================
|
||||
ALTER TABLE workflow_instances
|
||||
ADD COLUMN contract_id INT NULL COMMENT 'Contract ที่ Workflow นี้เป็นส่วนหนึ่ง (NULL = global/legacy)'
|
||||
AFTER definition_id,
|
||||
ADD CONSTRAINT fk_wf_inst_contract FOREIGN KEY (contract_id) REFERENCES contracts (id) ON DELETE
|
||||
SET NULL;
|
||||
|
||||
-- Index สำหรับ Guard lookup: "Instances ทั้งหมดในสัญญา X"
|
||||
CREATE INDEX idx_wf_inst_contract ON workflow_instances (contract_id, entity_type, STATUS);
|
||||
|
||||
-- Verify
|
||||
-- DESCRIBE workflow_instances;
|
||||
-- SHOW INDEX FROM workflow_instances WHERE Key_name = 'idx_wf_inst_contract';
|
||||
Reference in New Issue
Block a user