ATP - ثبت پاسخهای context (POST /api/v1/invention-cases/{invention_case_id}/context-answers/)
Endpoint
POST /api/v1/invention-cases/{invention_case_id}/context-answers/
هدف آزمون
ثبت پاسخهای structured، بستن دور سوالات، و در صورت نیاز rerun استخراج با command_generation جدید.
شرایط آزمون
- سرویس core-api در حال اجرا باشد
- هدر Authorization با access token معتبر
فرآیند آزمون
- GET context-questions و استخراج question_idها
- ساخت payload answers مطابق question_type
- POST context-answers
- بررسی saved_count برابر تعداد پاسخ
- poll workflow-state برای ready یا run بعدی
معرفی ویژگی
ثبت پاسخها، بستن round، و در صورت نیاز rerun استخراج با command_generation جدید.
- پس از answers کافی: run به
pendingبرمیگردد، generation افزایش مییابد، outbox جدید publish میشود - پس از broker confirm: status →
queuedتا outcome بعدی - readiness در این فاصله
extractingمیماند - outcome با generation/causation قدیمی = no-op
سناریوی آزمون
سناریو 1: مسیر موفق
- ارسال
POST /api/v1/invention-cases/{invention_case_id}/context-answers/ - دریافت پاسخ موفق
- بررسی ساختار پاسخ
سناریو 2: خطا - درخواست نامعتبر
- ارسال درخواست با داده یا شناسه نامعتبر
- دریافت کد خطای 4xx
- بررسی پیام خطای استاندارد API
سناریو 3: پاسخ کامل همه blocking
- دریافت N سوال blocking
- ارسال N پاسخ
- بررسی saved_count=N
- poll تا readiness=ready
سناریو 4: خطا — پاسخ خالی
- ارسال answers=[]
- دریافت 400
- بررسی "At least one answer is required"
قالب API
| مولفه | نوع | نوع داده | اجباری | توضیحات |
|---|---|---|---|---|
| answers | Body | object[] | بله | آرایه پاسخها |
| answers[].question_id | Body | uuid | بله | شناسه سوال |
| answers[].selected_option | Body | string | خیر | برای single_select |
| answers[].selected_options | Body | string[] | خیر | برای multi_select |
| answers[].free_text | Body | string | خیر | متن آزاد |
| answers[].is_unsure | Body | boolean | خیر | کاربر مطمئن نیست |
| invention_case_id | Path | uuid | بله | شناسه پرونده اختراع |
Swagger
post:
summary: ثبت پاسخهای context
responses:
201:
description: منبع ایجاد شد
400:
description: داده ورودی نامعتبر
401:
description: احراز هویت نامعتبر
نمونه ورودی
curl -X POST "http://localhost:8000/api/v1/invention-cases/{invention_case_id}/context-answers/" \
-H "Authorization: Bearer <access>" \
-H "Content-Type: application/json" \
-d '{"answers":[{"question_id":"...","free_text":"Reduces thermal runaway in EV packs."}]}'
نمونه خروجی
{
"success": true,
"data": {
"saved_count": 1,
"readiness": { "state": "extracting", "blocking_question_count": 0 },
"workflow_state": { "revision": 11 }
}
}
Status Codes
- 201: منبع ایجاد شد
- 400: داده ورودی نامعتبر
- 401: احراز هویت نامعتبر
نتیجه مورد انتظار
در صورت موفقیت، پاسخ JSON استاندارد با کد وضعیت مناسب برای POST برگردانده میشود.
روال صحتسنجی
- بررسی 200 و saved_count
- بررسی بسته شدن round (GET questions → round null)
- بررسی run.status=pending و افزایش command_generation پس از answers که rerun میسازند
- بررسی readiness=extracting تا outcome با generation جدید
توضیحات
- پاسخها در ContextAnswer ذخیره میشوند
- ممکن است run استخراج مجدد با generation جدید trigger شود
- ADR-0005 / CONTEXT_WORKFLOW.md مرجع lifecycle و generation pin