8.7 KiB
Farmer Calendar API
این فایل مستندات کامل APIهای اپ farmer_calendar را توضیح میدهد.
Base Path
تمام endpointهای این اپ با این prefix در دسترس هستند:
/api/events/
Authentication
همه endpointهای این اپ نیاز به احراز هویت دارند.
- Permission:
IsAuthenticated - Authentication: بر اساس تنظیمات DRF پروژه، معمولاً JWT
هدر معمول:
Authorization: Bearer <token>
Data Model
موجودیت اصلی در این اپ FarmerCalendarEvent است.
فیلدهای مهم:
id: شناسه عمومی event از نوع UUIDtitle: عنوان eventdescription: توضیحاتdeadline: مهلت به صورت timestamp عددیstart: زمان شروع eventend: زمان پایان eventextendedProps: دادههای اضافه به صورت objecttags: لیست tagها
Tag Rules
در نسخه فعلی، tags از دیتابیس خوانده نمیشوند و فقط از enum داخلی پروژه مجاز هستند.
نمونه tagهای مجاز:
آبیاریآفتفوریروزانهثبت دستیبازدیدکوددهیسمپاشیبرداشت
اگر tag خارج از enum ارسال شود، request با خطای validation رد میشود.
Priority
در مدل مشترک event/todo، اولویت به صورت enum تعریف شده است.
مقادیر مجاز:
زیادمتوسطکم
یا در بعضی serializerهای مرتبط، ورودی انگلیسی:
highmediumlow
Endpoints
1) List Events
GET /api/events/
Query Params
start: فیلتر از این datetime به بعدend: فیلتر تا این datetimefarm_uuid: اگر کاربر چند مزرعه داشته باشد، برای محدود کردن نتایج به یک مزرعه
Behavior
- فقط eventهای متعلق به farmهای کاربر login شده را برمیگرداند
- اگر
startارسال شود، eventهایی برمیگردند کهend >= start - اگر
endارسال شود، eventهایی برمیگردند کهstart <= end - خروجی بر اساس
startو بعدcreated_atمرتب میشود
Sample Request
GET /api/events/?farm_uuid=<farm_uuid>&start=2025-02-24T00:00:00Z&end=2025-02-25T00:00:00Z
Sample Response
{
"events": [
{
"id": "4be7c204-6fd8-4aa4-a5f4-7f0e9ceaa111",
"title": "آبیاری بلوک شمالی",
"description": "کنترل فشار و مدت زمان آبیاری",
"deadline": 1734942600,
"tags": ["آبیاری", "فوری"],
"start": "2025-02-24T06:30:00Z",
"end": "2025-02-24T08:00:00Z",
"extendedProps": {
"source": "manual"
}
}
],
"meta": {
"total": 1
}
}
2) Create Event
POST /api/events/
Request Body
title: اجباری، stringdescription: اختیاری، stringdeadline: اختیاری، integertags: اختیاری، array از tagهای enumstart: اجباری، datetimeend: اجباری، datetimeextendedProps: اختیاری، objectfarm_uuid: اختیاری، اما اگر کاربر چند farm داشته باشد اجباری میشود
Validation Rules
titleنباید خالی باشدextendedPropsباید object باشدendنباید ازstartکوچکتر باشدtagsفقط باید از enum مجاز باشند- اگر کاربر چند farm داشته باشد و
farm_uuidنفرستد، خطا برمیگردد
Sample Request
{
"farm_uuid": "6b7ce8a8-13ec-4a6e-9118-7c298fd2a111",
"title": "بازدید آفت در گلخانه",
"description": "بررسی وضعیت برگ ها و ثبت گزارش",
"deadline": 1734971400,
"tags": ["آفت", "فوری"],
"start": "2025-02-24T14:00:00Z",
"end": "2025-02-24T15:00:00Z",
"extendedProps": {
"source": "manual"
}
}
Sample Success Response
{
"event": {
"id": "7aa97f9f-bc4c-49f1-858f-11f3f433a111",
"title": "بازدید آفت در گلخانه",
"description": "بررسی وضعیت برگ ها و ثبت گزارش",
"deadline": 1734971400,
"tags": ["آفت", "فوری"],
"start": "2025-02-24T14:00:00Z",
"end": "2025-02-24T15:00:00Z",
"extendedProps": {
"source": "manual"
}
}
}
Sample Validation Error
{
"code": "EVENT_VALIDATION_ERROR",
"message": "title cannot be empty",
"details": {
"title": ["title cannot be empty"]
}
}
3) Get Event Detail
GET /api/events/<event_uuid>/
Path Param
event_uuid: شناسه UUID رویداد
Behavior
- فقط اگر event متعلق به کاربر باشد برگردانده میشود
- اگر وجود نداشته باشد یا متعلق به کاربر دیگری باشد،
404میدهد
Sample Response
{
"event": {
"id": "4be7c204-6fd8-4aa4-a5f4-7f0e9ceaa111",
"title": "آبیاری بلوک شمالی",
"description": "کنترل فشار و مدت زمان آبیاری",
"deadline": 1734942600,
"tags": ["آبیاری"],
"start": "2025-02-24T06:30:00Z",
"end": "2025-02-24T08:00:00Z",
"extendedProps": {}
}
}
Sample Not Found Response
{
"code": "EVENT_NOT_FOUND",
"message": "Event not found."
}
4) Update Event
PUT /api/events/<event_uuid>/
Request Body
ساختار body مثل create است.
Important Notes
- این endpoint در حال حاضر update کامل انجام میدهد، نه partial
- اگر
farm_uuidارسال شود، نباید با farm فعلی event فرق داشته باشد - اگر
tagsارسال شوند، tagهای قبلی با همان لیست جدید جایگزین میشوند
Sample Request
{
"title": "آبیاری بلوک شمالی",
"description": "اولویت بالا",
"deadline": 1734942600,
"tags": ["آبیاری", "فوری"],
"start": "2025-02-24T15:00:00Z",
"end": "2025-02-24T16:00:00Z",
"extendedProps": {}
}
Sample Response
{
"event": {
"id": "4be7c204-6fd8-4aa4-a5f4-7f0e9ceaa111",
"title": "آبیاری بلوک شمالی",
"description": "اولویت بالا",
"deadline": 1734942600,
"tags": ["آبیاری", "فوری"],
"start": "2025-02-24T15:00:00Z",
"end": "2025-02-24T16:00:00Z",
"extendedProps": {}
}
}
5) Delete Event
DELETE /api/events/<event_uuid>/
Sample Response
{
"success": true
}
6) List Available Tags
GET /api/events/tags/
Query Params
farm_uuid: اختیاری؛ در نسخه فعلی فقط validate میشود ولی لیست tagها از enum داخلی برمیگردد
Behavior
- tagها از enum کد برمیگردند
- این endpoint دیگر به دادههای tag در دیتابیس وابسته نیست
Sample Response
{
"tags": [
{
"id": "tag_irrigation",
"label": "آبیاری",
"value": "آبیاری"
},
{
"id": "tag_pest",
"label": "آفت",
"value": "آفت"
},
{
"id": "tag_urgent",
"label": "فوری",
"value": "فوری"
}
],
"meta": {
"total": 9
}
}
Error Format
فرمت خطاهای validation به این شکل است:
{
"code": "EVENT_VALIDATION_ERROR",
"message": "error message",
"details": {}
}
و خطای پیدا نشدن:
{
"code": "EVENT_NOT_FOUND",
"message": "Event not found."
}
Farm Resolution Rules
رفتار farm_uuid در این اپ:
- اگر کاربر فقط یک farm داشته باشد، در create میتواند
farm_uuidنفرستد - اگر کاربر چند farm داشته باشد، در create باید
farm_uuidبفرستد - اگر
farm_uuidنامعتبر باشد، validation error برمیگردد - در update،
farm_uuidنباید farm event را تغییر دهد
Implementation Notes
- فایل routeها:
farmer_calendar/urls.py - فایل viewها:
farmer_calendar/views.py - فایل serializerها:
farmer_calendar/serializers.py - enumهای tag و priority:
farmer_calendar/enums.py
Related Note
در ساختار فعلی پروژه، farmer_calendar و farmer_todos روی یک مدل مشترک سوار شدهاند، ولی endpointهای این فایل فقط مربوط به مسیرهای farmer_calendar هستند.