2026-03-29 15:07:14 +03:30
# Recommend Task Status API Guide
2026-05-02 06:16:36 +03:30
این فایل برای تیم فرانتاند توضیح میدهد که برای ماژولهای `fertilization` و `irrigation` چه درخواستهایی باید به بکاند ارسال شود و چه پاسخهایی باید دریافت شود.
2026-03-29 15:07:14 +03:30
## Fertilization Recommendation
### 1) ثبت درخواست پیشنهاد
**Endpoint **
`POST /api/fertilization-recommendation/recommend/`
**Request Body **
``` json
{
"crop_id" : "wheat" ,
"growth_stage" : "tillering" ,
"farm_data" : {
"soilType" : "loam" ,
"organicMatter" : "medium" ,
"waterEC" : "1.2"
} ,
"soilType" : "loam" ,
"organicMatter" : "medium" ,
"waterEC" : "1.2"
}
```
**Field Description **
- `crop_id` : شناسه محصول
- `growth_stage` : مرحله رشد محصول
- `farm_data.soilType` : نوع خاک
- `farm_data.organicMatter` : مقدار ماده آلی
- `farm_data.waterEC` : EC آب
- `soilType` , `organicMatter` , `waterEC` : همین دادهها اگر فرانت بخواهد به صورت flat هم ارسال کند
**Success Response **
اگر سرویس خارجی مستقیم نتیجه را برگرداند:
``` json
{
"status" : "success" ,
"data" : {
"plan" : {
"npkRatio" : "20-20-20" ,
"amountPerHectare" : "150 kg/ha" ,
"applicationMethod" : "drip" ,
"applicationInterval" : "every 14 days" ,
"reasoning" : "balanced nutrition for current growth stage"
}
}
}
```
اگر سرویس خارجی async باشد، معمولاً `task_id` برمیگرداند:
``` json
{
"status" : "success" ,
"data" : {
"task_id" : "fert-task-123" ,
"status" : "pending"
}
}
```
### 2) دریافت وضعیت تسک
**Endpoint **
`GET /api/fertilization-recommendation/recommend/status/{task_id}/`
**Path Param **
- `task_id` : شناسه تسکی که از مرحله قبل گرفته شده
**Success Response **
``` json
{
"status" : "success" ,
"data" : {
"task_id" : "fert-task-123" ,
"status" : "processing" ,
"progress" : {
"message" : "analyzing farm data"
} ,
"result" : {
"plan" : {
"npkRatio" : "20-20-20" ,
"amountPerHectare" : "150 kg/ha" ,
"applicationMethod" : "drip" ,
"applicationInterval" : "every 14 days" ,
"reasoning" : "balanced nutrition for current growth stage"
}
}
}
}
```
**Possible status values **
- `pending`
- `processing`
- `completed`
- `failed`
---
## Irrigation Recommendation
### 1) ثبت درخواست پیشنهاد
**Endpoint **
`POST /api/irrigation-recommendation/recommend/`
**Request Body **
``` json
{
"crop_id" : "wheat" ,
"farm_data" : {
"soilType" : "loam" ,
"waterQuality" : "good" ,
"climateZone" : "semi-arid"
} ,
"soilType" : "loam" ,
"waterQuality" : "good" ,
"climateZone" : "semi-arid"
}
```
**Field Description **
- `crop_id` : شناسه محصول
- `farm_data.soilType` : نوع خاک
- `farm_data.waterQuality` : کیفیت آب
- `farm_data.climateZone` : اقلیم
- `soilType` , `waterQuality` , `climateZone` : همین دادهها در حالت flat
**Success Response **
حالت نتیجه مستقیم:
``` json
{
"status" : "success" ,
"data" : {
"plan" : {
"frequencyPerWeek" : "3" ,
"durationMinutes" : "45" ,
"bestTimeOfDay" : "early morning" ,
"moistureLevel" : "optimal" ,
"warning" : "avoid irrigation during strong wind"
} ,
"raw_response" : "..." ,
"water_balance" : {
"daily" : [
{
"forecast_date" : "2025-03-28" ,
"et0_mm" : 4.1 ,
"etc_mm" : 3.8 ,
"effective_rainfall_mm" : 0.0 ,
"gross_irrigation_mm" : 3.8 ,
"irrigation_timing" : "06:00"
}
] ,
"crop_profile" : {
"kc_initial" : 0.7 ,
"kc_mid" : 1.05 ,
"kc_end" : 0.85
} ,
"active_kc" : 1.05
} ,
"status" : "completed"
}
}
```
حالت async:
``` json
{
"status" : "success" ,
"data" : {
"task_id" : "irr-task-123" ,
"status" : "pending"
}
}
```
### 2) دریافت وضعیت تسک
**Endpoint **
`GET /api/irrigation-recommendation/recommend/status/{task_id}/`
**Path Param **
- `task_id` : شناسه تسک
**Success Response **
``` json
{
"status" : "success" ,
"data" : {
"task_id" : "irr-task-123" ,
"status" : "completed" ,
"result" : {
"plan" : {
"frequencyPerWeek" : "3" ,
"durationMinutes" : "45" ,
"bestTimeOfDay" : "early morning" ,
"moistureLevel" : "optimal" ,
"warning" : "avoid irrigation during strong wind"
} ,
"raw_response" : "..." ,
"water_balance" : {
"daily" : [ ] ,
"crop_profile" : {
"kc_initial" : 0.7 ,
"kc_mid" : 1.05 ,
"kc_end" : 0.85
} ,
"active_kc" : 1.05
} ,
"status" : "completed"
}
}
}
```
---
## پیشنهاد پیادهسازی در فرانت
### Fertilization
1. با `POST /recommend/` درخواست را ارسال کنید.
2. اگر `data.task_id` برگشت، polling را با `GET /recommend/status/{task_id}/` شروع کنید.
3. وقتی `data.status` به `completed` رسید، `data.result` را نمایش دهید.
4. اگر `failed` شد، پیام خطا را به کاربر نشان دهید.
### Irrigation
1. با `POST /recommend/` درخواست را ارسال کنید.
2. اگر `task_id` برگشت، هر چند ثانیه وضعیت را چک کنید.
3. وقتی `completed` شد، `result.plan` و `result.water_balance` را نمایش دهید.
## نکات
- همه پاسخها در این پروژه معمولاً با ساختار زیر برمیگردند:
``` json
{
"status" : "success" ,
"data" : { }
}
```
- در صورت خطا ممکن است `status` مقدار دیگری داشته باشد یا سرویس خارجی خطای مستقیم برگرداند.
- فرانت باید هر دو حالت **direct result ** و **task-based result ** را هندل کند.