Return whether there's more notification in GET /api/notifications

This commit is contained in:
Son NK 2020-05-23 22:51:00 +02:00
parent c47fb44c1e
commit 1e03f26cfa
3 changed files with 41 additions and 19 deletions

View file

@ -1229,11 +1229,28 @@ Input:
- page in url: the page number, starts at 0 - page in url: the page number, starts at 0
Output: Output:
List of notification, each notification has: - more: whether there's more notifications
- id - notifications: list of notification, each notification has:
- message: the message in html - id
- read: whether the user has read the notification - message: the message in html
- created_at: when the notification is created - read: whether the user has read the notification
- created_at: when the notification is created
For example
```json
{
"more": false,
"notifications": [
{
"created_at": "2 minutes ago",
"id": 1,
"message": "Hey!",
"read": false
}
]
}
```
#### POST /api/notifications/:notification_id #### POST /api/notifications/:notification_id

View file

@ -1,5 +1,3 @@
from time import sleep
from flask import g from flask import g
from flask import jsonify from flask import jsonify
from flask import request from flask import request
@ -21,11 +19,13 @@ def get_notifications():
Input: Input:
- page: in url. Starts at 0 - page: in url. Starts at 0
Output: list of notifications. Each notification has the following field: Output:
- id - more: boolean. Whether there's more notification to load
- message - notifications: list of notifications.
- read - id
- created_at - message
- read
- created_at
""" """
user = g.user user = g.user
try: try:
@ -36,22 +36,25 @@ def get_notifications():
notifications = ( notifications = (
Notification.query.filter_by(user_id=user.id) Notification.query.filter_by(user_id=user.id)
.order_by(Notification.read, Notification.created_at.desc()) .order_by(Notification.read, Notification.created_at.desc())
.limit(PAGE_LIMIT) .limit(PAGE_LIMIT + 1) # load a record more to know whether there's more
.offset(page * PAGE_LIMIT) .offset(page * PAGE_LIMIT)
.all() .all()
) )
have_more = len(notifications) > PAGE_LIMIT
return ( return (
jsonify( jsonify(
[ more=have_more,
notifications=[
{ {
"id": notification.id, "id": notification.id,
"message": notification.message, "message": notification.message,
"read": notification.read, "read": notification.read,
"created_at": notification.created_at.humanize(), "created_at": notification.created_at.humanize(),
} }
for notification in notifications for notification in notifications[:PAGE_LIMIT]
] ],
), ),
200, 200,
) )

View file

@ -25,8 +25,9 @@ def test_get_notifications(flask_client):
) )
assert r.status_code == 200 assert r.status_code == 200
assert len(r.json) == 2 assert r.json["more"] is False
for n in r.json: assert len(r.json["notifications"]) == 2
for n in r.json["notifications"]:
assert n["id"] > 0 assert n["id"] > 0
assert n["message"] assert n["message"]
assert n["read"] is False assert n["read"] is False
@ -37,7 +38,8 @@ def test_get_notifications(flask_client):
url_for("api.get_notifications", page=1), url_for("api.get_notifications", page=1),
headers={"Authentication": api_key.code}, headers={"Authentication": api_key.code},
) )
assert len(r.json) == 0 assert r.json["more"] is False
assert len(r.json["notifications"]) == 0
def test_mark_notification_as_read(flask_client): def test_mark_notification_as_read(flask_client):