Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft: Implement new API routes to fetch blog posts by authorIds and to update a post #2

Open
wants to merge 79 commits into
base: main
Choose a base branch
from
Open
Changes from 1 commit
Commits
Show all changes
79 commits
Select commit Hold shift + click to select a range
9c54e06
Start route that handles GET request for posts having at least one of…
huaszu Apr 11, 2023
604f094
Update api/posts.py
huaszu Apr 13, 2023
6904073
Update URL of route and update return statement to have proper jsonif…
huaszu Apr 14, 2023
6589caf
Update URL of route and update return statement to have proper jsonif…
huaszu Apr 14, 2023
3774363
Correct URL to match specification. Shorten docstring.
huaszu Apr 15, 2023
68326a5
Make list of author_ids where each author_id is an integer
huaszu Apr 15, 2023
470cbf2
Make list of Post objects to represent in response
huaszu Apr 15, 2023
44f5f61
Make dictionary containing information to include in response. Forma…
huaszu Apr 15, 2023
d660db7
Handle case of user entering duplicate authors.
huaszu Apr 15, 2023
3a6f17b
Comment to explain use of dictionary.
huaszu Apr 15, 2023
9612dc6
Add file to ignore
huaszu Apr 15, 2023
76e5d03
Add key-value pair to inner dictionary of posts_data dictionary to he…
huaszu Apr 15, 2023
2e26c4b
Implement two directions for sorting blog posts.
huaszu Apr 15, 2023
cb60657
Suggest potential refactoring.
huaszu Apr 15, 2023
04b70b7
Handle error when required query parameter is missing. Handle error …
huaszu Apr 15, 2023
c5b84d0
Change error checking of direction by which to sort posts to help wit…
huaszu Apr 15, 2023
648c0f8
Initial commit
huaszu Apr 16, 2023
3a1e6b6
Implement type hints.
huaszu Apr 16, 2023
c208ca4
Update comment on alternative solution.
huaszu Apr 16, 2023
5529ef6
Refactor so as not to make unnecessary list of Post objects.
huaszu Apr 16, 2023
9a4d4c4
Use sets to consider unique author ids and unique posts. Handle case…
huaszu Apr 16, 2023
dbf2ea6
Update variable names for clarity. Make code more concise by removin…
huaszu Apr 17, 2023
24f1be2
Move file for better organization.
huaszu Apr 17, 2023
732a030
Use set comprehension. Save line of code that initialized an empty set.
huaszu Apr 17, 2023
b01a21f
Incorporate set comprehension. Initialize a set intended to be a sup…
huaszu Apr 17, 2023
6773aa4
Use list comprehension.
huaszu Apr 17, 2023
3ac2e08
Update error to warning.
huaszu Apr 22, 2023
dd9e9a9
Ensure that only a logged in can use this route.
huaszu Apr 22, 2023
c3f5764
Start route to update a blog post. Validate that user is logged in. …
huaszu Apr 23, 2023
7f3a782
Add instance method to get a post by post id.
huaszu Apr 23, 2023
c88810a
Enable logged in user to modify authorIds, tags, or text of post. Wh…
huaszu Apr 26, 2023
1da081a
Test use of row_to_dict(row) function.
huaszu Apr 26, 2023
8674425
Prepare format for Response Body.
huaszu Apr 27, 2023
1855fc0
Update response.
huaszu Apr 27, 2023
58917da
Attempt to get response to match exact format of specification, speci…
huaszu Apr 27, 2023
c4aeed8
Attempt differently to create specified order within response.
huaszu Apr 27, 2023
7107958
Set sorting of keys of JSON objects alphabetically to FALSE to achiev…
huaszu Apr 27, 2023
f630b16
Ensure only an author of a post can update the post.
huaszu Apr 27, 2023
9fcc11f
Give useful error message to user.
huaszu Apr 27, 2023
0f103f9
Give warning when database has no post with requested postId. Give e…
huaszu Apr 27, 2023
99c75f5
Handle error when user does not provide authorIds in the format of an…
huaszu Apr 27, 2023
a9fa08b
Handle error when user enters tags not in the format of an array. Ha…
huaszu Apr 27, 2023
03c8bd5
Handle error when user provides text that is not a string.
huaszu Apr 27, 2023
3c0a5f0
Sort tags alphabetically in response based on looking at example in s…
huaszu Apr 27, 2023
24fa5d1
Undo sort of tags in response because that sort made test_posts.py::t…
huaszu Apr 27, 2023
1321643
Remove unnecessary code because, for the Post class, the use of the @…
huaszu Apr 27, 2023
7b9cb9c
Test using db.utils.rows_to_list(rows) helper function to get toward …
huaszu Apr 27, 2023
d90805e
Improve error handling to handle additional error. Refactor implemen…
huaszu Apr 27, 2023
67ca0ef
Give up opportunity to deduplicate tags because, otherwise, the imple…
huaszu Apr 27, 2023
f4e0b34
Add static method for Post class that builds a query joining the post…
huaszu Apr 30, 2023
52bc8b4
Rename file
huaszu Apr 30, 2023
dd7ca19
Move constant to different file. Write helper functions.
huaszu May 1, 2023
68bb986
Write helper function to format results of database query per specifi…
huaszu May 1, 2023
3c3abdc
Eliminate unnecessary code to handle case when there are no posts to …
huaszu May 1, 2023
e13bc1c
Fix typograhical error
huaszu May 1, 2023
1d7f5ca
Remove unnecessary comment.
huaszu May 1, 2023
d160ce1
Rename file for clarity. Update comment for clarity.
huaszu May 1, 2023
f47e531
Use helper function to validate post_id and, if valid, return post.
huaszu May 1, 2023
e15c332
Make route more concise by factoring portions of code into helper fun…
huaszu May 1, 2023
dd272e8
Write helper function to get post and format information about post f…
huaszu May 1, 2023
06088b0
Refactor for extensibility. Map which kind of error handling message…
huaszu May 1, 2023
1d058c0
Rewrite for consistency and understanding.
huaszu May 2, 2023
5437c1e
Check whether user included data in request and give helpful error me…
huaszu May 2, 2023
c712f5a
Remove unnecessary commented out code.
huaszu May 2, 2023
c52b43c
Make repository layer for functions that make queries to the database…
huaszu Jun 25, 2023
d0a273e
Move function that queries database to repository layer. api/util/he…
huaszu Jun 25, 2023
1f55a4f
Pull out another three functions to repository layer that interact wi…
huaszu Jun 25, 2023
65ce818
Remove unnecessary imports. Fix code to refer to updated file name
huaszu Jun 25, 2023
7a69b51
Fix database operation to delete a UserPost record
huaszu Jun 26, 2023
5dc1b3d
Using Controller-Service-Repository pattern, refactor to make reposit…
huaszu Jul 2, 2023
39f41c7
Revise code to use consistent style across API routes
huaszu Jul 2, 2023
56a7666
Initial commit
huaszu Jul 3, 2023
c628c18
Views of SQLite database for reference, with the help of https://inlo…
huaszu Jul 3, 2023
088d1cd
Include prompt for easy reference. Introduce formatting for readabil…
huaszu Jul 3, 2023
1e15e1a
Improve technical correctness, style, organization, and readability
huaszu Jul 5, 2023
327719b
Update formatting so that all footnotes show
huaszu Jul 5, 2023
26dfb89
Edit list indentation for readability
huaszu Jul 5, 2023
9067923
Edit for clarity
huaszu Jul 5, 2023
cb0a60c
Fix spelling
huaszu Jul 5, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions api/posts.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,16 @@ def posts():
db.session.commit()

return row_to_dict(post), 200

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks like the function they gave you does validation this way
'''

validation

user = g.get("user")
if user is None:
    return abort(401)

'''
Maybe you can do the same in your function?

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

so far your suggestion appears to work. committed here.

i added the code you suggested. then i made this request and got this 401:
Screenshot 2023-04-22 at 6 34 04 PM

next i logged in:
Screenshot 2023-04-22 at 6 41 30 PM

now this request returned what i expected and 200 instead of the 401:
Screenshot 2023-04-22 at 6 44 15 PM


@api.route("/api/posts", methods=["GET"])
@auth_required
def fetch_posts():
"""
Fetch posts that have at least one of the authors specified in the authorIds parameter in the request.
"""
author_ids = request.args.get("authorIds", None)
huaszu marked this conversation as resolved.
Show resolved Hide resolved
sort_by = request.args.get("sortBy", "id")
direction = request.args.get("direction", "asc")

return jsonify(author_ids)
huaszu marked this conversation as resolved.
Show resolved Hide resolved