The before code allows multiple reviews from the same user for the same item, causing duplicates. The after code uses a dictionary keyed by user and item to ensure only one review exists per user-item pair, allowing updates to overwrite previous reviews.
### Before: No enforcement of single review per user per item
class Review:
def __init__(self, user_id, item_id, rating, comment):
self.user_id = user_id
self.item_id = item_id
self.rating = rating
self.comment = comment
reviews = []
def add_review(review):
reviews.append(review)
### After: Enforce one review per user per item with update support
class Review:
def __init__(self, user_id, item_id, rating, comment):
self.user_id = user_id
self.item_id = item_id
self.rating = rating
self.comment = comment
reviews = {}
# Key: (user_id, item_id)
def add_or_update_review(review):
key = (review.user_id, review.item_id)
reviews[key] = review
# Example usage
r1 = Review('user1', 'item1', 5, 'Great product!')
add_or_update_review(r1)
r2 = Review('user1', 'item1', 4, 'Changed my mind, still good.')
add_or_update_review(r2)
print(reviews[("user1", "item1")].rating) # Outputs: 4