diff --git a/flashcards/models.py b/flashcards/models.py index 91efcd2..c2532e2 100644 --- a/flashcards/models.py +++ b/flashcards/models.py @@ -77,14 +77,16 @@ class User(AbstractUser, SimpleEmailConfirmationUserMixin): def pull(self, flashcard): if not self.is_in_section(flashcard.section): raise ValueError("User not in the section this flashcard belongs to") + user_card = UserFlashcard.objects.create(user=self, flashcard=flashcard) - user_card.pulled = now() user_card.save() + import flashcards.notifications flashcards.notifications.notify_score_change(flashcard) flashcards.notifications.notify_pull(flashcard) + def unpull(self, flashcard): if not self.is_in_section(flashcard.section): raise ValueError("User not in the section this flashcard belongs to") @@ -395,7 +397,7 @@ class Section(Model): return '%s %s' % (self.department_abbreviation, self.course_num) def get_feed_for_user(self, user): - cards = list(self.get_cards_for_user(user).exclude(Q(userflashcard__user=user) & (~Q(author=user)))) + cards = list(self.get_cards_for_user(user)) cards.sort(key=lambda x: -x.score) return cards diff --git a/flashcards/views.py b/flashcards/views.py index 0fdf34a..df4874c 100644 --- a/flashcards/views.py +++ b/flashcards/views.py @@ -1,5 +1,6 @@ import django from django.contrib import auth +from django.db import IntegrityError from django.shortcuts import get_object_or_404 from flashcards.api import StandardResultsSetPagination, IsEnrolledInAssociatedSection, IsFlashcardReviewer from flashcards.models import Section, User, Flashcard, FlashcardHide, UserFlashcard, UserFlashcardQuiz @@ -305,9 +306,11 @@ class FlashcardViewSet(GenericViewSet, CreateModelMixin, RetrieveModelMixin): --- view_mocker: flashcards.api.mock_no_params """ - - request.user.pull(self.get_object()) - return Response(status=HTTP_204_NO_CONTENT) + try: + request.user.pull(self.get_object()) + return Response(status=HTTP_204_NO_CONTENT) + except IntegrityError, e: + raise ValidationError('Cannot pull a card already in deck') @detail_route(methods=['POST']) def unpull(self, request, pk):