From 6236b5d914b604efd220b96e12088c8217628df7 Mon Sep 17 00:00:00 2001 From: Arda Arslan Date: Mon, 18 Dec 2023 16:32:21 +0300 Subject: [PATCH 1/2] user can add semantic tag to themself --- project/backend/api/urls.py | 1 + project/backend/api/views.py | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/project/backend/api/urls.py b/project/backend/api/urls.py index 7b4bb1e6..eef0830e 100644 --- a/project/backend/api/urls.py +++ b/project/backend/api/urls.py @@ -38,4 +38,5 @@ path('ask_question/', AskQuestion.as_view(), name='ask_question'), path('answer_question/', AnswerQuestion.as_view(), name='answer_question'), path('update_content_status/', update_content_status, name='update_content_status'), + path('add_user_semantic_tag/', AddUserSemanticTag.as_view(), name='add_user_semantic_tag'), ] diff --git a/project/backend/api/views.py b/project/backend/api/views.py index 45f70664..b8483c43 100644 --- a/project/backend/api/views.py +++ b/project/backend/api/views.py @@ -1089,4 +1089,27 @@ def update_content_status(request): except Exception as e: return Response({'message': str(e)}, status=status.HTTP_400_BAD_REQUEST) +class AddUserSemanticTag(APIView): + authentication_classes = (TokenAuthentication,) + permission_classes = (IsAuthenticated,) + def post(self, request): + sm_tag_id = request.data.get('sm_tag_id') + if not sm_tag_id: + return Response({"error": "Semantic Tag ID is required."}, status=status.HTTP_400_BAD_REQUEST) + try: + user = BasicUser.objects.get(pk=request.user.basicuser.pk) + except: + return Response({"error": "User not found."}, status=status.HTTP_404_NOT_FOUND) + try: + sm_tag = SemanticTag.objects.get(pk=sm_tag_id) + except: + return Response({"error": "Semantic Tag not found."}, status=status.HTTP_404_NOT_FOUND) + + if user.semantic_tags.filter(pk=sm_tag_id).exists(): + return Response({"error": "User already has this Semantic Tag."}, status=status.HTTP_400_BAD_REQUEST) + + user.semantic_tags.add(sm_tag) + return Response({"message": "Semantic Tag successfully added to user."}, status=status.HTTP_201_CREATED) + + \ No newline at end of file From 7dcebf533ce55eb5e025e3cf375a53449f369b74 Mon Sep 17 00:00:00 2001 From: Arda Arslan Date: Mon, 18 Dec 2023 16:41:17 +0300 Subject: [PATCH 2/2] testcase for user adding smtag written --- project/backend/api/tests.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/project/backend/api/tests.py b/project/backend/api/tests.py index 7e62213f..1facc82f 100644 --- a/project/backend/api/tests.py +++ b/project/backend/api/tests.py @@ -966,3 +966,26 @@ def test_no_context_given(self): response = self.client.put(url, data, format='json') self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + +class AddUserSemanticTagTestCase(TestCase): + def setUp(self): + self.client = APIClient() + self.user = User.objects.create_user(id=1, email='test@example.com', username='test@example.com', first_name='User', + last_name='Test') + self.basic_user = BasicUser.objects.create(user=self.user, bio='Hello') + + self.basic_user_token = Token.objects.create(user=self.user) + + self.client.credentials(HTTP_AUTHORIZATION=f"Token {self.basic_user_token.key}") + + self.sm_tag = SemanticTag.objects.create( + wid="QXXX", + label="Test SM Tag" + ) + def test_add_user_semantic_tag(self): + url = reverse('add_user_semantic_tag') + payload = { + 'sm_tag_id': self.sm_tag.pk, + } + response = self.client.post(url, payload, format='json') + self.assertEqual(response.status_code, status.HTTP_201_CREATED) \ No newline at end of file