This commit is contained in:
2026-04-05 05:10:17 +03:30
parent ec8e72737b
commit 6f098a1021
6 changed files with 457 additions and 6 deletions
+80
View File
@@ -0,0 +1,80 @@
# Notification API Changes
## Added paginated notification list API
A new endpoint was added to return all notifications for a farm using pagination.
### Endpoint
`GET /api/notifications/list/`
### Query params
- `farm_uuid` (required): UUID of the farm
- `page` (optional): page number, default depends on DRF pagination behavior
- `page_size` (optional): number of items per page, default `10`, max `100`
### Behavior
- Requires authenticated user
- Returns notifications only if the farm belongs to the authenticated user
- Orders notifications by newest first using `created_at DESC, id DESC`
- Returns paginated response
- Returns `404` if the farm is not found or does not belong to the user
### Response shape
```json
{
"count": 12,
"next": "http://localhost:8000/api/notifications/list/?farm_uuid=<uuid>&page=2&page_size=5",
"previous": null,
"results": {
"code": 200,
"msg": "success",
"data": [
{
"uuid": "...",
"farm_uuid": "...",
"since_id": 12,
"title": "Alert",
"message": "Check sensor",
"level": "info",
"is_read": false,
"metadata": {},
"created_at": "2025-01-01T10:00:00Z"
}
]
}
}
```
## Long-poll behavior update
The `long-poll` notification logic was updated to prioritize unread notifications.
### Updated behavior
- Returns unread notifications first
- If unread notifications are fewer than `5`, fills the remaining slots with read notifications
- If unread notifications are `5` or more, returns only the first `5` unread notifications
### Notes
This behavior was implemented in the notification service layer so the existing long-poll endpoint automatically uses it.
## Files changed
- `notifications/views.py`
- `notifications/urls.py`
- `notifications/services.py`
- `notifications/tests.py`
## Tests added
Added tests for:
- paginated notification list for owned farm
- `404` for unowned farm on list API
- unread-first ordering in long-poll
- long-poll fallback with read notifications when unread count is below `5`