9.6 KiB
9.6 KiB
Fertilization Recommendation History APIs
این فایل برای تیم فرانت نوشته شده تا بتواند از APIهای history توصیه های کودهی استفاده کند.
وضعیت recommendation
هر recommendation یک status دارد.
statusهای ممکن
pending_confirmation→منتظر تاییدin_progress→در حال مصرفcompleted→پایان یافته
وضعیت فعلی سیستم
فعلاً همه recommendationهای جدید و recommendationهای قبلی که migrate شده اند با وضعیت زیر ذخیره می شوند:
pending_confirmation- برچسب نمایشی:
منتظر تایید
فرانت باید status را برای منطق برنامه و status_label را برای نمایش مستقیم استفاده کند.
1) لیست توصیه های کودهی یک مزرعه
Endpoint
GET /api/fertilization/recommendations/?farm_uuid=<farm_uuid>
کاربرد
- نمایش history توصیه های کودهی یک مزرعه
- ساخت جدول یا لیست برای مشاهده توصیه های قبلی
- نمایش badge وضعیت recommendation
- ورود به صفحه جزئیات هر recommendation
Query Params
farm_uuid: شناسه مزرعهcrop_id: شناسه یا نام محصول. این فیلد همان plant name است و مستقیم برای AI هم ارسال می شودpage: شماره صفحه، شروع از1page_size: تعداد آیتم در هر صفحه، بین1تا100
هدرها
Authorization: Bearer <token>Accept: application/json
نمونه درخواست
curl -X GET \
'http://localhost:8000/api/fertilization/recommendations/?farm_uuid=11111111-1111-1111-1111-111111111111&page=1&page_size=10' \
-H 'accept: application/json' \
-H 'Authorization: Bearer <token>'
نمونه پاسخ موفق
{
"code": 200,
"msg": "success",
"data": [
{
"recommendation_uuid": "4d595ee0-9dbb-4c50-a871-2b4359d0d748",
"crop_id": "گندم",
"plant_name": "گندم",
"growth_stage": "vegetative",
"fertilizer_type": "NPK",
"status": "pending_confirmation",
"status_label": "منتظر تایید",
"requested_at": "2025-01-10T08:30:00Z"
},
{
"recommendation_uuid": "bbdf0d50-0f78-4099-a4d3-b1c4aa54eeb9",
"crop_id": "ذرت",
"plant_name": "ذرت",
"growth_stage": "flowering",
"fertilizer_type": "Micronutrient",
"status": "pending_confirmation",
"status_label": "منتظر تایید",
"requested_at": "2025-01-08T09:10:00Z"
}
],
"pagination": {
"page": 1,
"page_size": 10,
"total_pages": 3,
"total_items": 25,
"has_next": true,
"has_previous": false,
"next": "http://localhost:8000/api/fertilization/recommendations/?farm_uuid=11111111-1111-1111-1111-111111111111&page=2&page_size=10",
"previous": null
}
}
فیلدهای data[]
recommendation_uuid: شناسه یکتای recommendation برای گرفتن جزئیاتcrop_id: شناسه یا نام محصول ثبت شده در recommendationplant_name: معادل نمایشیcrop_idبرای سازگاری با فرانتgrowth_stage: مرحله رشد در زمان ثبت recommendationfertilizer_type: نوع کود پیشنهادی مثلNPKstatus: کد وضعیت recommendationstatus_label: متن نمایشی وضعیت recommendationrequested_at: زمان ثبت recommendation
فیلدهای pagination
page: صفحه فعلیpage_size: تعداد آیتم در هر صفحهtotal_pages: تعداد کل صفحاتtotal_items: تعداد کل recommendationهاhas_next: آیا صفحه بعدی وجود دارد یا نهhas_previous: آیا صفحه قبلی وجود دارد یا نهnext: لینک صفحه بعدیprevious: لینک صفحه قبلی
پیشنهاد نمایش status در UI
pending_confirmation→ badge زرد یا خاکستری روشنin_progress→ badge آبی یا سبزcompleted→ badge خاکستری یا سفید
خطاهای رایج
مزرعه پیدا نشد
{
"farm_uuid": [
"Farm not found."
]
}
پارامترهای pagination نامعتبر
{
"page": [
"Ensure this value is greater than or equal to 1."
]
}
2) جزئیات یک recommendation
Endpoint
GET /api/fertilization/recommendations/<recommendation_uuid>/
کاربرد
- نمایش کامل جزئیات recommendation
- باز کردن صفحه detail یا modal recommendation
- replay کردن خروجی recommendation بدون نیاز به درخواست مجدد از AI
Path Param
recommendation_uuid: شناسه recommendation از API لیست
نکته مهم برای محصول
- فیلد اصلی محصول در این ماژول
crop_idاست crop_idهمان plant name است- بک اند همان
crop_idرا مستقیم برای AI ارسال می کند plant_nameدر response فقط برای سازگاری فرانت نگه داشته شده و مقدارش برابرcrop_idاست
هدرها
Authorization: Bearer <token>Accept: application/json
نمونه درخواست
curl -X GET \
'http://localhost:8000/api/fertilization/recommendations/4d595ee0-9dbb-4c50-a871-2b4359d0d748/' \
-H 'accept: application/json' \
-H 'Authorization: Bearer <token>'
نمونه پاسخ موفق
{
"code": 200,
"msg": "success",
"data": {
"crop_id": "گندم",
"plant_name": "گندم",
"growth_stage": "vegetative",
"status": "pending_confirmation",
"status_label": "منتظر تایید",
"primary_recommendation": {
"fertilizer_code": "npk-202020",
"fertilizer_name": "NPK 20-20-20",
"display_title": "کود کامل متعادل",
"fertilizer_type": "NPK",
"npk_ratio": {
"n": 20,
"p": 20,
"k": 20,
"label": "20-20-20"
},
"application_method": {
"id": "fertigation",
"label": "کودآبیاری"
},
"application_interval": {
"value": 14,
"unit": "day",
"label": "هر 14 روز"
},
"dosage": {
"base_amount_per_hectare": 65,
"base_amount_per_square_meter": 0.0065,
"unit": "kg",
"label": "65 کیلوگرم در هکتار",
"calculation_basis": "engine-v2"
},
"reasoning": "متعادل برای فاز رشد",
"summary": "مصرف منظم در این مرحله توصیه می شود"
},
"nutrient_analysis": {
"macro": [
{
"key": "n",
"name": "Nitrogen",
"value": 20,
"unit": "percent",
"description": "تقویت رشد رویشی"
}
],
"micro": []
},
"application_guide": {
"safety_warning": "در ساعات خنک مصرف شود",
"steps": [
{
"step_number": 1,
"title": "حل کردن",
"description": "کود را در آب حل کنید"
}
]
},
"alternative_recommendations": [
{
"fertilizer_code": "npk-121236",
"fertilizer_name": "NPK 12-12-36",
"fertilizer_type": "NPK",
"usage_method": "fertigation",
"description": "برای نیاز پتاس بالا"
}
],
"sections": [
{
"type": "recommendation",
"title": "پیشنهاد اصلی",
"icon": "leaf",
"content": "NPK 20-20-20"
}
]
}
}
نکته مهم
این response دقیقا همان ساختار endpoint زیر را برمی گرداند:
POST /api/fertilization/recommend/
یعنی فرانت می تواند برای صفحه detail همان componentهایی را استفاده کند که برای recommendation اصلی استفاده می کند.
خطای رایج
recommendation پیدا نشد
{
"code": 404,
"msg": "Recommendation not found."
}
پیشنهاد پیاده سازی در فرانت
برای صفحه history
- ابتدا API لیست را با
farm_uuidصدا بزنید dataرا در جدول یا کارت لیست نمایش دهیدstatus_labelرا مستقیم در badge یا chip نشان دهید- اگر لازم بود رفتار UI بر اساس وضعیت تغییر کند، از
statusاستفاده کنید - با
pagination.pageوpagination.total_pagesصفحه بندی را بسازید - روی هر آیتم با
recommendation_uuidبه صفحه detail بروید
برای صفحه detail
recommendation_uuidرا از route بگیرید- API جزئیات را صدا بزنید
data.primary_recommendationرا در Hero/Card اصلی نمایش دهیدdata.nutrient_analysisرا در بخش تحلیل عناصر نمایش دهیدdata.application_guideرا در بخش راهنمای مصرف نمایش دهیدdata.alternative_recommendationsرا برای جایگزین ها نمایش دهید- در صورت نیاز برای سازگاری، از
data.sectionsهم استفاده کنید
فرمول محاسبه مقدار مصرف
مقدار کل = base_amount_per_square_meter × مساحت مزرعه
خلاصه مسیرها
- لیست recommendationها:
GET /api/fertilization/recommendations/?farm_uuid=<farm_uuid>&page=1&page_size=10
- جزئیات recommendation:
GET /api/fertilization/recommendations/<recommendation_uuid>/