268 lines
5.8 KiB
Markdown
268 lines
5.8 KiB
Markdown
|
|
# Recommend Task Status API Guide
|
||
|
|
|
||
|
|
این فایل برای تیم فرانتاند توضیح میدهد که برای ماژولهای `fertilization` و `irrigation` چه درخواستهایی باید به بکاند ارسال شود و چه پاسخهایی باید دریافت شود.
|
||
|
|
|
||
|
|
## 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** را هندل کند.
|