ATP - شروع تولید گزارش prior-art (POST /api/v1/invention-cases/{invention_case_id}/prior-art/report/)
Endpoint
POST /api/v1/invention-cases/{invention_case_id}/prior-art/report/
هدف آزمون
enqueue تولید گزارش markdown پس از search completed.
شرایط آزمون
- سرویس core-api در حال اجرا باشد
- هدر Authorization با access token معتبر
فرآیند آزمون
- ارسال درخواست POST به
/api/v1/invention-cases/{invention_case_id}/prior-art/report/ - دریافت پاسخ HTTP
- بررسی کد وضعیت و بدنه JSON
معرفی ویژگی
مرحله ۲ prior-art — مستقل از search اما به نتیجه search وابسته. worker گزارش markdown را در S3 مینویسد.
- lifecycle: pending → queued (broker confirm) → completed | failed
- RabbitMQ: prior_art.report.requested
- ورودی: search result artifact + top_k
- خروجی: report_markdown_artifact_key
- exhaustion: command_publish_exhausted → report retry
سناریوی آزمون
سناریو 1: مسیر موفق
- ارسال
POST /api/v1/invention-cases/{invention_case_id}/prior-art/report/ - دریافت پاسخ موفق
- بررسی ساختار پاسخ
سناریو 2: خطا - درخواست نامعتبر
- ارسال درخواست با داده یا شناسه نامعتبر
- دریافت کد خطای 4xx
- بررسی پیام خطای استاندارد API
سناریو 3: گزارش با top_k=5
- search completed
- POST {"top_k":5}
- 202
- بررسی top_k در report_execution
سناریو 4: خطا — بدون search
- بدون search completed
- POST report
- 400
قالب API
| مولفه | نوع | نوع داده | اجباری | توضیحات |
|---|---|---|---|---|
| search_execution_id | Body | uuid | خیر | اجرای جستجوی مبدأ؛ پیشفرض آخرین completed |
| top_k | Body | integer | خیر | تعداد مرجع برای گزارش (۱–۱۰۰، پیشفرض ۱۰) |
| invention_case_id | Path | uuid | بله | شناسه پرونده اختراع |
Swagger
post:
summary: شروع تولید گزارش prior-art
responses:
201:
description: منبع ایجاد شد
400:
description: داده ورودی نامعتبر
401:
description: احراز هویت نامعتبر
نمونه ورودی
curl -X POST "http://localhost:8000/api/v1/invention-cases/{invention_case_id}/prior-art/report/" \
-H "Authorization: Bearer <access>" \
-H "Content-Type: application/json" \
-d '{"top_k": 8}'
نمونه خروجی
{
"success": true,
"data": {}
}
Status Codes
- 202: گزارش enqueue شد
- 400: search completed موجود نیست
نتیجه مورد انتظار
در صورت موفقیت، پاسخ JSON استاندارد با کد وضعیت مناسب برای POST برگردانده میشود.
روال صحتسنجی
- بررسی کد وضعیت HTTP
- بررسی فیلد success در بدنه
- بررسی عدم افشای داده حساس
توضیحات
- مسیر باید با پیادهسازی فعلی urls.py همخوان باشد
جریان یکپارچهسازی
1. POST prior-art/report { top_k? }
2. core-api: PriorArtReportExecution (pending) + command_event_id
3. outbox publisher (confirm) → RabbitMQ: prior_art.report.requested
4. domain → queued
5. ai-workflow: synthesize markdown report → S3
6. RabbitMQ: prior_art.report.completed | failed
7. core-api inbox: terminal update (monotonic)
8. GET report یا /report/download