fix: updated api response

This commit is contained in:
adeel.tajamul
2022-06-15 17:37:13 +05:00
parent 18cec24f15
commit 7481b11e25
3 changed files with 51 additions and 38 deletions

View File

@@ -18,6 +18,7 @@ from edx_django_utils.monitoring import function_trace
from opaque_keys import InvalidKeyError
from opaque_keys.edx.locator import CourseKey
from rest_framework.exceptions import PermissionDenied
from rest_framework.response import Response
from rest_framework.request import Request
from xmodule.course_module import CourseBlock
from xmodule.modulestore.django import modulestore
@@ -30,6 +31,7 @@ from lms.djangoapps.discussion.toggles import ENABLE_LEARNERS_TAB_IN_DISCUSSIONS
from lms.djangoapps.discussion.toggles_utils import reported_content_email_notification_enabled
from openedx.core.djangoapps.discussions.models import DiscussionsConfiguration, DiscussionTopicLink, Provider
from openedx.core.djangoapps.discussions.utils import get_accessible_discussion_xblocks
from openedx.core.djangoapps.django_comment_common import comment_client
from openedx.core.djangoapps.django_comment_common.comment_client.comment import Comment
from openedx.core.djangoapps.django_comment_common.comment_client.course import (
get_course_commentable_counts,
@@ -851,6 +853,50 @@ def get_thread_list(
})
def get_learner_active_thread_list(request, course_key, query_params):
"""
Return the list of active threads of a particular user in query params
user_id must be given in query_params
Parameters:
request: The django request objects used for build_absolute_uri
course_key: The key of the course
query_params: If true, fetch the count of flagged items in each thread
Returns:
A paginated result containing a list of threads.
"""
course = _get_course(course_key, request.user)
context = get_context(course, request)
group_id = query_params.get('group_id', None)
user_id = query_params.get('user_id', None)
if user_id is None:
return Response({'details': 'Invalid user id'}, status=400)
if group_id is not None:
profiled_user = comment_client.User(id=user_id, course_id=course_key, group_id=group_id)
else:
profiled_user = comment_client.User(id=user_id, course_id=course_key)
threads, page, num_pages = profiled_user.active_threads(query_params)
results = _serialize_discussion_entities(
request, context, threads, {'profile_image'}, DiscussionEntity.thread
)
paginator = DiscussionAPIPagination(
request,
page,
num_pages,
len(threads)
)
return paginator.get_paginated_response({
"results": results,
})
def get_comment_list(request, thread_id, endorsed, page, page_size, flagged=False, requested_fields=None):
"""
Return the list of comments in the given thread.

View File

@@ -1472,17 +1472,7 @@ class LearnerThreadViewAPITest(DiscussionAPIViewTestMixin, ModuleStoreTestCase):
assert response.status_code == 200
response_data = json.loads(response.content.decode('utf-8'))
expected_api_response = expected_response['collection']
for thread in expected_api_response:
for key in ['group_id', 'abuse_flagged_count', 'closed_by', 'close_reason_code']:
thread.pop(key)
assert response_data["results"] == expected_api_response
assert response_data["pagination"] == {
"num_pages": 1,
"page": 1,
"count": 1,
"next": None,
"previous": None,
}
assert response_data['results'] == expected_api_response
def test_no_user_id_given(self):
response = self.client.get(self.url)

View File

@@ -24,13 +24,8 @@ from xmodule.modulestore.django import modulestore
from common.djangoapps.util.file import store_uploaded_file
from lms.djangoapps.course_goals.models import UserActivity
from lms.djangoapps.discussion.django_comment_client.permissions import has_permission
from lms.djangoapps.discussion.django_comment_client import settings as cc_settings
from lms.djangoapps.discussion.django_comment_client.utils import (
get_group_id_for_comments_service,
is_user_community_ta,
prepare_content,
)
from lms.djangoapps.discussion.django_comment_client.utils import get_group_id_for_comments_service
from lms.djangoapps.instructor.access import update_forum_role
from openedx.core.djangoapps.discussions.serializers import DiscussionSettingsSerializer
from openedx.core.djangoapps.django_comment_common import comment_client
@@ -54,6 +49,7 @@ from ..rest_api.api import (
get_response_comments,
get_thread,
get_thread_list,
get_learner_active_thread_list,
get_user_comments,
update_comment,
update_thread,
@@ -608,28 +604,9 @@ class LearnerThreadView(APIView):
"per_page": threads_per_page,
"course_id": str(course_key),
"user_id": user_id,
"group_id": group_id
}
if group_id is not None:
query_params['group_id'] = group_id
profiled_user = comment_client.User(id=user_id, course_id=course_key, group_id=group_id)
else:
profiled_user = comment_client.User(id=user_id, course_id=course_key)
threads, page, num_pages = profiled_user.active_threads(query_params)
is_staff = has_permission(request.user, 'openclose_thread', course_key)
is_community_ta = is_user_community_ta(request.user, course_key)
threads = [prepare_content(thread, course_key, is_staff, is_community_ta) for thread in threads]
return Response({
"results": threads,
"pagination": {
"num_pages": num_pages,
"page": page,
"count": len(threads),
"next": page + 1 if page < num_pages else None,
"previous": None if page <= 1 else page - 1,
}
})
return get_learner_active_thread_list(request, course_key, query_params)
@view_auth_classes()