Skip to content

Commit

Permalink
feat: Use username to get user's review
Browse files Browse the repository at this point in the history
  • Loading branch information
anshg1214 committed Sep 9, 2022
1 parent 73e4003 commit faca4d1
Show file tree
Hide file tree
Showing 12 changed files with 265 additions and 161 deletions.
8 changes: 6 additions & 2 deletions critiquebrainz/db/review.py
Original file line number Diff line number Diff line change
Expand Up @@ -406,10 +406,14 @@ def invalidate_ws_entity_cache(entity_id, entity_type, user_id):

cache_keys_for_top_reviews_key = cache.gen_key('entity_api', entity_type, entity_id, "top_reviews")
cache_keys_for_latest_reviews_key = cache.gen_key('entity_api', entity_type, entity_id, "latest_reviews")
cache_keys_for_user_reviews_key = cache.gen_key('entity_api', entity_id, user_id, "user_reviews")
cache.delete(cache_keys_for_top_reviews_key, namespace=REVIEW_CACHE_NAMESPACE)
cache.delete(cache_keys_for_latest_reviews_key, namespace=REVIEW_CACHE_NAMESPACE)
cache.delete(cache_keys_for_user_reviews_key, namespace=REVIEW_CACHE_NAMESPACE)

user = db_users.get_by_id(user_id)
username = user["musicbrainz_username"]
if username:
cache_keys_for_user_reviews_key = cache.gen_key('entity_api', entity_id, username, "user_reviews")
cache.delete(cache_keys_for_user_reviews_key, namespace=REVIEW_CACHE_NAMESPACE)


# pylint: disable=too-many-branches
Expand Down
39 changes: 24 additions & 15 deletions critiquebrainz/ws/artist/views.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from flask import Blueprint, jsonify
import critiquebrainz.db.review as db_review
import critiquebrainz.db.users as db_users
import critiquebrainz.db.rating_stats as db_rating_stats
from critiquebrainz.frontend.external.musicbrainz_db import artist as db_artist
from critiquebrainz.decorators import crossdomain
Expand Down Expand Up @@ -223,6 +224,8 @@ def artist_entity_handler(artist_mbid):
:statuscode 200: no error
:statuscode 404: artist not found
:query username: User's username **(optional)**
:resheader Content-Type: *application/json*
"""

Expand All @@ -232,23 +235,28 @@ def artist_entity_handler(artist_mbid):

user_review = None

user_id = Parser.uuid('uri', 'user_id', optional=True)
if user_id:
user_review_cache_key = cache.gen_key('entity_api', artist['mbid'], user_id, "user_review")
username = Parser.string('uri', 'username', optional=True)
if username:
user_review_cache_key = cache.gen_key('entity_api', artist['mbid'], username, "user_review")
user_review = cache.get(user_review_cache_key)
if not user_review:
user_review, _ = db_review.list_reviews(
entity_id=artist['mbid'],
entity_type='artist',
user_id=user_id
)
if user_review:
user_review = db_review.to_dict(user_review[0])
else:
user_review = None
user = db_users.get_by_mbid(username)
if user:
user_id = user['id']

user_review, _ = db_review.list_reviews(
entity_id=artist['mbid'],
entity_type='artist',
user_id=user_id
)
if user_review:
user_review = db_review.to_dict(user_review[0])

cache.set(user_review_cache_key, user_review,
expirein=REVIEW_CACHE_TIMEOUT, namespace=REVIEW_CACHE_NAMESPACE)
cache.set(user_review_cache_key, user_review,
expirein=REVIEW_CACHE_TIMEOUT, namespace=REVIEW_CACHE_NAMESPACE)

else:
user_review = []

ratings_stats, average_rating = db_rating_stats.get_stats(artist_mbid, "artist")

Expand Down Expand Up @@ -296,7 +304,8 @@ def artist_entity_handler(artist_mbid):
"top_reviews": top_reviews,
"latest_reviews": latest_reviews
}
if user_id:

if username:
result['user_review'] = user_review

return jsonify(**result)
35 changes: 22 additions & 13 deletions critiquebrainz/ws/bb_author/views.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from flask import Blueprint, jsonify
import critiquebrainz.db.review as db_review
import critiquebrainz.db.users as db_users
import critiquebrainz.db.rating_stats as db_rating_stats
from critiquebrainz.frontend.external.bookbrainz_db import author as db_author
from critiquebrainz.decorators import crossdomain
Expand Down Expand Up @@ -159,6 +160,8 @@ def author_entity_handler(author_bbid):
:statuscode 200: no error
:statuscode 404: author not found
:query username: User's username **(optional)**
:resheader Content-Type: *application/json*
"""

Expand All @@ -169,23 +172,29 @@ def author_entity_handler(author_bbid):

user_review = []

user_id = Parser.uuid('uri', 'user_id', optional=True)
if user_id:
user_review_cache_key = cache.gen_key('entity_api', author['bbid'], user_id, "user_review")
username = Parser.string('uri', 'username', optional=True)
if username:
user_review_cache_key = cache.gen_key('entity_api', author['bbid'], username, "user_review")
user_review = cache.get(user_review_cache_key)
if not user_review:
user_review, _ = db_review.list_reviews(
entity_id=author['bbid'],
entity_type='bb_author',
user_id=user_id
)
if user_review:
user_review = db_review.to_dict(user_review[0])
user = db_users.get_by_mbid(username)
if user:
user_id = user['id']

user_review, _ = db_review.list_reviews(
entity_id=author['bbid'],
entity_type='bb_author',
user_id=user_id
)
if user_review:
user_review = db_review.to_dict(user_review[0])

cache.set(user_review_cache_key, user_review,
expirein=REVIEW_CACHE_TIMEOUT, namespace=REVIEW_CACHE_NAMESPACE)

else:
user_review = []

cache.set(user_review_cache_key, user_review,
expirein=REVIEW_CACHE_TIMEOUT, namespace=REVIEW_CACHE_NAMESPACE)

ratings_stats, average_rating = db_rating_stats.get_stats(author_bbid, "bb_author")

Expand Down Expand Up @@ -233,7 +242,7 @@ def author_entity_handler(author_bbid):
"top_reviews": top_reviews,
"latest_reviews": latest_reviews
}
if user_id:
if username:
result['user_review'] = user_review

return jsonify(**result)
37 changes: 23 additions & 14 deletions critiquebrainz/ws/bb_edition_group/views.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from flask import Blueprint, jsonify
import critiquebrainz.db.review as db_review
import critiquebrainz.db.users as db_users
import critiquebrainz.db.rating_stats as db_rating_stats
from critiquebrainz.frontend.external.bookbrainz_db import edition_group as db_edition_group
from critiquebrainz.decorators import crossdomain
Expand Down Expand Up @@ -137,6 +138,8 @@ def edition_group_entity_handler(edition_group_bbid):
:statuscode 200: no error
:statuscode 404: edition group not found
:query username: User's username **(optional)**
:resheader Content-Type: *application/json*
"""

Expand All @@ -147,24 +150,29 @@ def edition_group_entity_handler(edition_group_bbid):

user_review = []

user_id = Parser.uuid('uri', 'user_id', optional=True)
if user_id:
user_review_cache_key = cache.gen_key('entity_api', edition_group['bbid'], user_id, "user_review")
username = Parser.string('uri', 'username', optional=True)
if username:
user_review_cache_key = cache.gen_key('entity_api', edition_group['bbid'], username, "user_review")
user_review = cache.get(user_review_cache_key)
if not user_review:
user_review, _ = db_review.list_reviews(
entity_id=edition_group['bbid'],
entity_type='bb_edition_group',
user_id=user_id
)
if user_review:
user_review = db_review.to_dict(user_review[0])
user = db_users.get_by_mbid(username)
if user:
user_id = user['id']

user_review, _ = db_review.list_reviews(
entity_id=edition_group['bbid'],
entity_type='bb_edition_group',
user_id=user_id
)
if user_review:
user_review = db_review.to_dict(user_review[0])

cache.set(user_review_cache_key, user_review,
expirein=REVIEW_CACHE_TIMEOUT, namespace=REVIEW_CACHE_NAMESPACE)

else:
user_review = []

cache.set(user_review_cache_key, user_review,
expirein=REVIEW_CACHE_TIMEOUT, namespace=REVIEW_CACHE_NAMESPACE)

ratings_stats, average_rating = db_rating_stats.get_stats(edition_group_bbid, "bb_edition_group")

top_reviews_cache_key = cache.gen_key("entity_api_bb_edition_group", edition_group['bbid'], "top_reviews")
Expand Down Expand Up @@ -211,7 +219,8 @@ def edition_group_entity_handler(edition_group_bbid):
"top_reviews": top_reviews,
"latest_reviews": latest_reviews
}
if user_id:

if username:
result['user_review'] = user_review

return jsonify(**result)
37 changes: 23 additions & 14 deletions critiquebrainz/ws/bb_literary_work/views.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from flask import Blueprint, jsonify
import critiquebrainz.db.review as db_review
import critiquebrainz.db.users as db_users
import critiquebrainz.db.rating_stats as db_rating_stats
from critiquebrainz.frontend.external.bookbrainz_db import literary_work as db_literary_work
from critiquebrainz.decorators import crossdomain
Expand Down Expand Up @@ -157,6 +158,8 @@ def literary_work_entity_handler(literary_work_bbid):
:statuscode 200: no error
:statuscode 404: literary work not found
:query username: User's username **(optional)**
:resheader Content-Type: *application/json*
"""

Expand All @@ -167,24 +170,29 @@ def literary_work_entity_handler(literary_work_bbid):

user_review = []

user_id = Parser.uuid('uri', 'user_id', optional=True)
if user_id:
user_review_cache_key = cache.gen_key('entity_api', literary_work['bbid'], user_id, "user_review")
username = Parser.string('uri', 'username', optional=True)
if username:
user_review_cache_key = cache.gen_key('entity_api', literary_work['bbid'], username, "user_review")
user_review = cache.get(user_review_cache_key)
if not user_review:
user_review, _ = db_review.list_reviews(
entity_id=literary_work['bbid'],
entity_type='bb_literary_work',
user_id=user_id
)
if user_review:
user_review = db_review.to_dict(user_review[0])
user = db_users.get_by_mbid(username)
if user:
user_id = user['id']

user_review, _ = db_review.list_reviews(
entity_id=literary_work['bbid'],
entity_type='bb_literary_work',
user_id=user_id
)
if user_review:
user_review = db_review.to_dict(user_review[0])

cache.set(user_review_cache_key, user_review,
expirein=REVIEW_CACHE_TIMEOUT, namespace=REVIEW_CACHE_NAMESPACE)

else:
user_review = []

cache.set(user_review_cache_key, user_review,
expirein=REVIEW_CACHE_TIMEOUT, namespace=REVIEW_CACHE_NAMESPACE)

ratings_stats, average_rating = db_rating_stats.get_stats(literary_work_bbid, "bb_literary_work")

top_reviews_cache_key = cache.gen_key("entity_api_bb_literary_work", literary_work['bbid'], "top_reviews")
Expand Down Expand Up @@ -231,7 +239,8 @@ def literary_work_entity_handler(literary_work_bbid):
"top_reviews": top_reviews,
"latest_reviews": latest_reviews
}
if user_id:

if username:
result['user_review'] = user_review

return jsonify(**result)
36 changes: 23 additions & 13 deletions critiquebrainz/ws/bb_series/views.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from flask import Blueprint, jsonify
import critiquebrainz.db.review as db_review
import critiquebrainz.db.users as db_users
import critiquebrainz.db.rating_stats as db_rating_stats
from critiquebrainz.frontend.external.bookbrainz_db import series as db_series
from critiquebrainz.decorators import crossdomain
Expand Down Expand Up @@ -129,6 +130,8 @@ def series_entity_handler(series_bbid):
:statuscode 200: no error
:statuscode 404: series not found
:query username: User's username **(optional)**
:resheader Content-Type: *application/json*
"""

Expand All @@ -139,23 +142,29 @@ def series_entity_handler(series_bbid):

user_review = []

user_id = Parser.uuid('uri', 'user_id', optional=True)
if user_id:
user_review_cache_key = cache.gen_key('entity_api', series['bbid'], user_id, "user_review")
username = Parser.string('uri', 'username', optional=True)
if username:
user_review_cache_key = cache.gen_key('entity_api', series['bbid'], username, "user_review")
user_review = cache.get(user_review_cache_key)
if not user_review:
user_review, _ = db_review.list_reviews(
entity_id=series['bbid'],
entity_type='bb_series',
user_id=user_id
)
if user_review:
user_review = db_review.to_dict(user_review[0])
user = db_users.get_by_mbid(username)
if user:
user_id = user['id']

user_review, _ = db_review.list_reviews(
entity_id=series['bbid'],
entity_type='bb_series',
user_id=user_id
)
if user_review:
user_review = db_review.to_dict(user_review[0])

cache.set(user_review_cache_key, user_review,
expirein=REVIEW_CACHE_TIMEOUT, namespace=REVIEW_CACHE_NAMESPACE)

else:
user_review = []

cache.set(user_review_cache_key, user_review,
expirein=REVIEW_CACHE_TIMEOUT, namespace=REVIEW_CACHE_NAMESPACE)

ratings_stats, average_rating = db_rating_stats.get_stats(series_bbid, "bb_series")

Expand Down Expand Up @@ -203,7 +212,8 @@ def series_entity_handler(series_bbid):
"top_reviews": top_reviews,
"latest_reviews": latest_reviews
}
if user_id:

if username:
result['user_review'] = user_review

return jsonify(**result)
Loading

0 comments on commit faca4d1

Please sign in to comment.