-
-
Notifications
You must be signed in to change notification settings - Fork 64
/
Copy pathreturnHomeFeedData.py
69 lines (56 loc) · 2.44 KB
/
returnHomeFeedData.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# Import required modules and functions
from modules import (
getHomeFeedData,
Blueprint,
make_response,
getSlugFromPostTitle,
url_for,
getProfilePicture,
request,
)
returnHomeFeedDataBlueprint = Blueprint("returnHomeFeedData", __name__)
@returnHomeFeedDataBlueprint.route("/api/v1/homeFeedData")
def homeFeedData():
"""
API endpoint to fetch home feed data.
Accepts query parameters: category, by, sort, limit, offset
"""
# Get query parameters with default values if not provided
category = request.args.get("category", type=str, default="all")
by = request.args.get("by", type=str, default="hot")
sort = request.args.get("sort", type=str, default="desc")
limit = request.args.get("limit", type=int, default=6)
offset = request.args.get("offset", type=int, default=0)
try:
# Fetch raw home feed data based on parameters
rawHomeFeedData = getHomeFeedData(
category=category, by=by, sort=sort, limit=limit, offset=offset
)
listOfHomeFeedData = []
# Process each post's raw data
for data in rawHomeFeedData:
homeFeedObj = {}
homeFeedObj["id"] = data[0] # Post ID
homeFeedObj["title"] = data[1] # Post Title
homeFeedObj["content"] = data[2] # Post Content
homeFeedObj["author"] = data[3] # Author Name
homeFeedObj["timeStamp"] = data[4] # Timestamp
homeFeedObj["category"] = data[5] # Post Category
homeFeedObj["urlID"] = data[6] # URL ID
# Generate URL for the post's banner image
homeFeedObj["bannerImgSrc"] = url_for(
"returnPostBanner.returnPostBanner", postID=data[0]
)
# Get the author's profile picture
homeFeedObj["authorProfile"] = getProfilePicture(data[3])
# Generate URL for viewing the full post
homeFeedObj["postLink"] = url_for(
"post.post", slug=getSlugFromPostTitle(data[1]), urlID=data[6]
)
# Add the processed post data to the list
listOfHomeFeedData.append(homeFeedObj)
# Return the list as a JSON payload with status 200 OK
return make_response({"payload": listOfHomeFeedData}, 200)
except Exception as e:
# In case of any error, return a JSON error response with status 500 Internal Server Error
return make_response({"error": f"{e}"}, 500)