Browse Source

ensure the course multilanguages are isolated with all related apps

master
Mohsen Taba 1 month ago
parent
commit
2e37ea5b2a
  1. 11
      apps/blog/views_admin.py
  2. 11
      apps/quiz/views/admin.py
  3. 15
      apps/transaction/views.py

11
apps/blog/views_admin.py

@ -36,13 +36,22 @@ class AdminBlogViewSet(ModelViewSet):
# Custom Search handling for JSON fields # Custom Search handling for JSON fields
search_query = self.request.query_params.get('search', None) search_query = self.request.query_params.get('search', None)
has_search = False
if search_query: if search_query:
has_search = True
from django.db.models import Case, When, Value, IntegerField
# Note: Searching inside a JSON array of dicts in Django can be tricky # Note: Searching inside a JSON array of dicts in Django can be tricky
# depending on your DB (PostgreSQL vs SQLite). # depending on your DB (PostgreSQL vs SQLite).
# This is a safe fallback using text casting for SQLite/PG compatibility. # This is a safe fallback using text casting for SQLite/PG compatibility.
queryset = queryset.filter( queryset = queryset.filter(
Q(title__icontains=search_query) | Q(title__icontains=search_query) |
Q(slogan__icontains=search_query) Q(slogan__icontains=search_query)
).annotate(
search_relevance=Case(
When(title__icontains=search_query, then=Value(2)),
default=Value(1),
output_field=IntegerField()
)
) )
created_date = self.request.query_params.get('created', None) created_date = self.request.query_params.get('created', None)
@ -57,6 +66,8 @@ class AdminBlogViewSet(ModelViewSet):
if created_before: if created_before:
queryset = queryset.filter(created_at__date__lte=created_before) queryset = queryset.filter(created_at__date__lte=created_before)
if has_search:
return queryset.order_by('-search_relevance', '-created_at')
return queryset.order_by('-created_at') return queryset.order_by('-created_at')
class AdminBlogContentViewSet(ModelViewSet): class AdminBlogContentViewSet(ModelViewSet):

11
apps/quiz/views/admin.py

@ -91,14 +91,23 @@ class AdminQuizViewSet(ModelViewSet):
# Handle Search # Handle Search
search_query = self.request.query_params.get('search', None) search_query = self.request.query_params.get('search', None)
has_search = False
if search_query: if search_query:
has_search = True
matching_course_ids = find_matching_course_ids(search_query) matching_course_ids = find_matching_course_ids(search_query)
matching_lesson_ids = find_matching_lesson_ids(search_query) matching_lesson_ids = find_matching_lesson_ids(search_query)
from django.db.models import Case, When, Value, IntegerField
queryset = queryset.filter( queryset = queryset.filter(
Q(title__icontains=search_query) | Q(title__icontains=search_query) |
Q(description__icontains=search_query) | Q(description__icontains=search_query) |
Q(course_id__in=matching_course_ids) | Q(course_id__in=matching_course_ids) |
Q(lesson_id__in=matching_lesson_ids) Q(lesson_id__in=matching_lesson_ids)
).annotate(
search_relevance=Case(
When(title__icontains=search_query, then=Value(2)),
default=Value(1),
output_field=IntegerField()
)
) )
# Handle Course Filter # Handle Course Filter
@ -119,6 +128,8 @@ class AdminQuizViewSet(ModelViewSet):
elif status_param.lower() == 'false': elif status_param.lower() == 'false':
queryset = queryset.filter(status=False) queryset = queryset.filter(status=False)
if has_search:
return queryset.order_by('-search_relevance', '-id')
return queryset.order_by('-id') return queryset.order_by('-id')
@action(detail=True, methods=['get']) @action(detail=True, methods=['get'])

15
apps/transaction/views.py

@ -462,6 +462,7 @@ class AdminTransactionViewSet(ModelViewSet):
""" """
queryset = TransactionParticipant.objects.all() queryset = TransactionParticipant.objects.all()
serializer_class = AdminTransactionSerializer serializer_class = AdminTransactionSerializer
permission_classes = [IsAuthenticated, IsSuperAdmin] permission_classes = [IsAuthenticated, IsSuperAdmin]
authentication_classes = [TokenAuthentication] authentication_classes = [TokenAuthentication]
pagination_class = StandardResultsSetPagination pagination_class = StandardResultsSetPagination
@ -476,7 +477,9 @@ class AdminTransactionViewSet(ModelViewSet):
# Search # Search
search_query = self.request.query_params.get('search', None) search_query = self.request.query_params.get('search', None)
has_search = False
if search_query: if search_query:
has_search = True
matching_course_ids = list( matching_course_ids = list(
Course.objects.filter( Course.objects.filter(
Q(title__icontains=search_query) | Q(title__icontains=search_query) |
@ -492,10 +495,19 @@ class AdminTransactionViewSet(ModelViewSet):
or normalized_search in extract_text_from_json(course.slug).lower() or normalized_search in extract_text_from_json(course.slug).lower()
] ]
from django.db.models import Case, When, Value, IntegerField
queryset = queryset.filter( queryset = queryset.filter(
Q(user__fullname__icontains=search_query) | Q(user__fullname__icontains=search_query) |
Q(user__email__icontains=search_query) | Q(user__email__icontains=search_query) |
Q(course_id__in=matching_course_ids) Q(course_id__in=matching_course_ids)
).annotate(
search_relevance=Case(
When(user__fullname__icontains=search_query, then=Value(3)),
When(user__email__icontains=search_query, then=Value(2)),
When(course_id__in=matching_course_ids, then=Value(1)),
default=Value(0),
output_field=IntegerField()
)
) )
# Status filter # Status filter
@ -525,5 +537,6 @@ class AdminTransactionViewSet(ModelViewSet):
if date_before: if date_before:
queryset = queryset.filter(created_at__date__lte=date_before) queryset = queryset.filter(created_at__date__lte=date_before)
if has_search:
return queryset.order_by('-search_relevance', '-created_at')
return queryset.order_by('-created_at') return queryset.order_by('-created_at')
Loading…
Cancel
Save