Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
15 changes: 11 additions & 4 deletions care/emr/api/viewsets/favorites.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,8 @@ def favorite_lists(self, request, *args, **kwargs):
favorite_lists_cache_key(user, self.FAVORITE_RESOURCE, facility)
)
if favorite_lists is None:
favorite_list_obj = list(
set(
favorite_lists = list(
dict.fromkeys(
UserResourceFavorites.objects.filter(
user=user,
resource_type=self.FAVORITE_RESOURCE,
Expand All @@ -54,8 +54,9 @@ def favorite_lists(self, request, *args, **kwargs):
)
cache.set(
favorite_lists_cache_key(user, self.FAVORITE_RESOURCE, facility),
favorite_list_obj,
favorite_lists,
)

return Response({"lists": favorite_lists})

@action(detail=True, methods=["POST"])
Expand All @@ -64,14 +65,15 @@ def add_favorite(self, request, *args, **kwargs):
favorite_list = request_data.favorite_list
obj = self.get_object()
user = self.request.user

favorite_list_obj, _ = UserResourceFavorites.objects.get_or_create(
user=user,
favorite_list=favorite_list,
resource_type=self.FAVORITE_RESOURCE,
facility=self.retrieve_facility_obj(obj),
)

favorite_list_obj.favorites.insert(0, obj.id)
# trim favorites list to max allowed
favorite_list_obj.favorites = list(dict.fromkeys(favorite_list_obj.favorites))[
: settings.MAX_FAVORITES_PER_LIST
]
Expand All @@ -85,16 +87,20 @@ def remove_favorite(self, request, *args, **kwargs):
obj = self.get_object()
user = self.request.user
facility = self.retrieve_facility_obj(obj)

favorite_list_obj = UserResourceFavorites.objects.filter(
user=user,
favorite_list=favorite_list,
resource_type=self.FAVORITE_RESOURCE,
facility=facility,
).first()

if not favorite_list_obj:
raise ValidationError("Favorite List not found")

favorite_list_obj_favorites = dict.fromkeys(favorite_list_obj.favorites)
favorite_list_obj_favorites.pop(obj.id, None)

if len(favorite_list_obj_favorites) == 0:
cache.delete(
favorite_lists_cache_key(user, self.FAVORITE_RESOURCE, facility)
Expand All @@ -109,6 +115,7 @@ def remove_favorite(self, request, *args, **kwargs):
)
UserResourceFavorites.objects.filter(id=favorite_list_obj.id).delete()
return Response({})

favorite_list_obj.favorites = list(favorite_list_obj_favorites)
favorite_list_obj.save(update_fields=["favorites"])
return Response({})
12 changes: 12 additions & 0 deletions care/emr/tests/test_favorites_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,18 @@ def test_list_favorites_list(self):
)
)

def test_favorite_lists_returns_list_on_first_call(self):
cache.delete(self.favorite_list_cache_key)

response = self.client.get(self.base_url + "favorite_lists/")

self.assertEqual(response.status_code, 200, response.content)
self.assertIn("lists", response.data)
self.assertEqual(response.data["lists"], [])

data = cache.get(self.favorite_list_cache_key)
self.assertEqual(data, [])

def test_list_ordered_by_favorites(self):
charge_item = self.create_charge_item_definition()
charge_item_2 = self.create_charge_item_definition()
Expand Down
2 changes: 1 addition & 1 deletion care/users/api/viewsets/plug_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ class PlugConfigViewset(
def list(self, request, *args, **kwargs):
# Cache data and return
response = cache.get(self.cache_key)
if not response:
if response is None: # cache miss; allow cached empty list
serializer = self.get_serializer(self.get_queryset(), many=True)
response = serializer.data
cache.set(self.cache_key, response)
Expand Down