7.2 KiB
7.2 KiB
Yield/Harvest Prediction API Changes
این فایل تغییرات 3 API زیر را توضیح میدهد:
POST /api/yield-harvest/harvest-prediction/POST /api/yield-harvest/yield-prediction/POST /api/yield-harvest/current-farm-chart/
خلاصه تغییرات
تغییر اصلی در هر 3 endpoint این است که backend حالا context موردنیاز AI را خودش از روی مزرعه و planهای انتخابی میسازد.
قبل
در استفاده قدیمی، معمولاً فرض میشد client باید context بیشتری برای AI بفرستد.
الآن
farm_uuidورودی اصلی و الزامی است.plant_nameاگر هم توسط client ارسال شود، مبنای نهایی backend نیست و از روی مزرعه بازنویسی/resolve میشود.- در صورت نیاز،
irrigation_plan_uuidوfertilization_plan_uuidهم میتوانند ارسال شوند. - اگر plan انتخابی معتبر و متعلق به همان مزرعه کاربر باشد، backend محتوای آن را به payload ارسالی به AI اضافه میکند.
- خروجی backend بهصورت یکدست با فرمت
code / msg / dataبرگردانده میشود.
Request Contract جدید
هر 3 API از این قرارداد ورودی استفاده میکنند:
{
"farm_uuid": "11111111-1111-1111-1111-111111111111",
"irrigation_plan_uuid": "6d6a1f0d-1a9b-4f2f-8fe1-2d73d9d2d9f1",
"fertilization_plan_uuid": "7e7b2f1e-2b0c-4a3a-9fe2-3e84e0e3e0a2"
}
فیلدها
farm_uuidاجباریirrigation_plan_uuidاختیاریfertilization_plan_uuidاختیاری
نکته مهم
اگر client plant_name بفرستد، در این APIها مبنای نهایی backend نیست؛ backend نام گیاه را از مزرعه استخراج میکند.
1) POST /api/yield-harvest/current-farm-chart/
تغییرات
- ورودی endpoint عملاً بر پایه
farm_uuidکار میکند وplant_nameاز context مزرعه تعیین میشود. - backend بهصورت خودکار
plant_nameرا از مزرعه پیدا میکند. - در صورت ارسال
irrigation_plan_uuid، اطلاعات برنامه آبیاری داخل payload ارسالی به AI قرار میگیرد. - در صورت ارسال
fertilization_plan_uuid، اطلاعات برنامه کودی هم اضافه میشود.
نمونه request
{
"farm_uuid": "11111111-1111-1111-1111-111111111111"
}
payload ارسالی backend به AI
نمونه مفهومی:
{
"farm_uuid": "11111111-1111-1111-1111-111111111111",
"plant_name": "گوجهفرنگی"
}
در صورت انتخاب plan
نمونه مفهومی:
{
"farm_uuid": "11111111-1111-1111-1111-111111111111",
"plant_name": "گوجهفرنگی",
"irrigation_plan": {
"id": 12,
"plan_payload": {
"plan": {
"durationMinutes": 20
}
}
}
}
پاسخ موفق
{
"code": 200,
"msg": "success",
"data": {
"farm_uuid": "11111111-1111-1111-1111-111111111111",
"plant_name": "گوجهفرنگی",
"scenario_id": 1,
"categories": ["day1"],
"series": {
"biomass": [1.2]
}
}
}
2) POST /api/yield-harvest/harvest-prediction/
تغییرات
- ورودی endpoint عملاً بر پایه
farm_uuidکار میکند وplant_nameتوسط backend تعیین میشود. - امکان ارسال
fertilization_plan_uuidوirrigation_plan_uuidبرای enrich کردن context اضافه/پشتیبانی شده است. - پاسخ AI بعد از extract شدن در
data.result، به شکل مستقیم درdataبرگردانده میشود.
نمونه request
{
"farm_uuid": "11111111-1111-1111-1111-111111111111",
"fertilization_plan_uuid": "7e7b2f1e-2b0c-4a3a-9fe2-3e84e0e3e0a2"
}
payload ارسالی backend به AI
{
"farm_uuid": "11111111-1111-1111-1111-111111111111",
"plant_name": "گوجهفرنگی",
"fertilization_plan": {
"id": 34,
"plan_payload": {
"primary_recommendation": {
"fertilizer_code": "npk-151515"
}
}
}
}
پاسخ موفق
{
"code": 200,
"msg": "success",
"data": {
"date": "2026-07-15",
"dateFormatted": "15 Jul 2026",
"daysUntil": 96,
"gddDetails": {
"current": 800
}
}
}
3) POST /api/yield-harvest/yield-prediction/
تغییرات
- مثل دو endpoint دیگر،
plant_nameاز روی مزرعه resolve میشود. - در نبود محصول مستقیم روی مزرعه، backend از fallback مناسب مزرعه استفاده میکند.
- امکان ارسال
irrigation_plan_uuidوfertilization_plan_uuidبرای فرستادن context planها به AI اضافه/پشتیبانی شده است. - پاسخ نهایی با ساختار یکنواخت
code / msg / dataبرگردانده میشود.
نمونه request
{
"farm_uuid": "11111111-1111-1111-1111-111111111111",
"irrigation_plan_uuid": "6d6a1f0d-1a9b-4f2f-8fe1-2d73d9d2d9f1",
"fertilization_plan_uuid": "7e7b2f1e-2b0c-4a3a-9fe2-3e84e0e3e0a2"
}
payload ارسالی backend به AI
{
"farm_uuid": "11111111-1111-1111-1111-111111111111",
"plant_name": "گوجهفرنگی",
"irrigation_plan": {
"id": 12,
"plan_payload": {
"plan": {
"durationMinutes": 30
}
}
},
"fertilization_plan": {
"id": 34,
"plan_payload": {
"primary_recommendation": {
"fertilizer_code": "npk-202020"
}
}
}
}
پاسخ موفق
{
"code": 200,
"msg": "success",
"data": {
"farm_uuid": "11111111-1111-1111-1111-111111111111",
"predictedYieldTons": 8.4,
"scenarioId": 1
}
}
خطاها و Validation
1) مزرعه نامعتبر یا متعلق به کاربر دیگر
در این حالت endpoint خطای دسترسی/یافتنشدن مزرعه برمیگرداند.
2) plan نامعتبر یا متعلق به مزرعه دیگر
اگر irrigation_plan_uuid یا fertilization_plan_uuid متعلق به همان مزرعه کاربر نباشد، درخواست با خطا رد میشود.
نمونه:
{
"code": 404,
"msg": "error",
"data": {
"irrigation_plan_uuid": [
"Irrigation plan not found."
]
}
}
3) خطای validation ورودی
اگر farm_uuid ارسال نشود یا plan_uuidها نامعتبر باشند، serializer خطای validation برمیگرداند.
جمعبندی تغییرات برای فرانت
- دیگر لازم نیست
plant_nameرا برای این 3 API بفرستید. - فقط
farm_uuidاجباری است. - اگر کاربر plan خاصی را انتخاب کرده،
irrigation_plan_uuidو/یاfertilization_plan_uuidرا هم بفرستید. - response هر 3 endpoint با ساختار یکنواخت
code,msg,dataبرمیگردد. - backend خودش payload مناسب AI را از context مزرعه و planهای انتخابی میسازد.