Private Docs

04 — TaskService — Integration Contract

Integration contract ที่ orchestrator ต้องการจาก Task — endpoint paths/shape (M9-M11) เป็นข้อเสนอไปคุยกับทีม Task

อัปเดต: 2026-06-15

อ่าน 00-OVERVIEW.md + CONTEXT.md ก่อน Scope (grill 2026-06-15): ไฟล์นี้ = integration contract ที่ orchestrator ต้องการจาก Task — endpoint paths/shape (M9-M11) เป็น ข้อเสนอไปคุยกับทีม Task ไม่ใช่ค่าที่ lock ฝ่ายเดียว บทบาท: Task = ที่เก็บ “งาน” ที่เปิดเมื่อมี request จาก Lego (ผ่าน orchestrator) — orchestrator เรียกผ่าน HTTP (ITaskPort) สถานะปัจจุบัน: create มี (แต่ไม่ idempotent-by-refNo, คืน TaskID ใน Result, 200), GET /ref คืน 200+null ตอน miss, ไม่มี MarkRework


บทบาทของ Task ในระบบนี้

orchestrator เรียก Task ตาม saga lifecycle:

ตอนSaga event→ Task
submit (first)TaskCreationRequestedcreate
rework/resubmitTaskReworkRequestedmark-rework
approveTaskCompleteRequestedcomplete
reject / cancelTaskCloseRequestedclose

idempotency อยู่ฝั่ง orchestrator (decision C — skip create ถ้า Correlations.TaskId มีแล้ว); Task UNIQUE(RefNo) เป็น follow-up ไม่ block งานนี้


Tasks

T1 — Create task (มีแล้ว — ยืนยัน contract)

  • คืน TaskID ให้ orchestrator เก็บใน Correlations.TaskId
  • (follow-up, ไม่ block) เพิ่ม unique index บน RefNo เป็น defense-in-depth

T2 — NEW: mark-rework (PATCH)

  • เปลี่ยน task ที่เปิดอยู่เป็นสถานะ “ส่งกลับแก้ไข” (ไม่ปิด — owner กำลังแก้)
  • รับ taskId หรือ refNo

T3 — NEW: close + complete

  • complete (approve): ปิดแบบสำเร็จ
  • close (reject/cancel): ปิดแบบยกเลิก
  • idempotent: ปิด task ที่ปิดแล้ว = no-op (200) — สำคัญสำหรับ cancel double-sweep + cancel-vs-create race (00 §6)

T4 — GET by ref (มีแล้ว — ปรับ contract)

  • ปัจจุบัน miss → 200 + null; ปรับเป็น 404 ถ้า orchestrator ต้องแยก “ไม่มี” ออกจาก “มีแต่ null” (คุยกับ orchestrator adapter P3)

Test checklist

  • create คืน TaskID
  • mark-rework เปลี่ยนสถานะถูก (ไม่ปิด task)
  • complete / close แยกผลถูก
  • close idempotent (ปิดซ้ำ = no-op 200)
  • GET by ref miss → 404 (ถ้าตกลงตาม T4)

Phase-0 ต้อง ratify

  • Endpoint paths M9-M11 (00 §7.1)
  • contract miss-behavior ของ GET /ref (T4) กับ orchestrator
  • ใครถือ idempotency key (orchestrator saga-state ตาม decision C — Task ไม่ต้องทำ แต่ต้องรู้)