Skip to content
Merged
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
10 changes: 9 additions & 1 deletion apps/application/serializers/application_chat.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ class ApplicationChatQuerySerializers(serializers.Serializer):
validators.RegexValidator(regex=re.compile("^and|or$"), message=_("Only supports and|or"), code=500)
],
)
order_by = serializers.CharField(required=False, allow_null=True, allow_blank=True, label=_("order by"))

def is_valid(self, *, raise_exception=False):
super().is_valid(raise_exception=True)
Expand Down Expand Up @@ -101,6 +102,7 @@ def get_query_set(self, select_ids=None):
"star_num": models.IntegerField(),
"trample_num": models.IntegerField(),
"comparer": models.CharField(),
"application_chat.chat_record_count": models.IntegerField(),
"application_chat.update_time": models.DateTimeField(),
"application_chat.id": models.UUIDField(),
"application_chat_record_temp.id": models.UUIDField(),
Expand Down Expand Up @@ -144,7 +146,13 @@ def get_query_set(self, select_ids=None):
else:
condition = base_condition

return {"default_queryset": query_set.filter(condition).order_by("-application_chat.update_time")}
order_by = self.data.get("order_by")
if order_by:
field = order_by.lstrip("-")
order_by = f"{'-' if order_by.startswith('-') else ''}application_chat.{field}"
else:
order_by = "-application_chat.update_time"
return {"default_queryset": query_set.filter(condition).order_by(order_by)}

def list(self, with_valid=True):
if with_valid:
Expand Down
9 changes: 7 additions & 2 deletions apps/application/serializers/application_chat_record.py
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@ class ApplicationChatRecordQuerySerializers(serializers.Serializer):
application_id = serializers.UUIDField(required=True, label=_("Application ID"))
chat_id = serializers.UUIDField(required=True, label=_("Chat ID"))
order_asc = serializers.BooleanField(required=False, allow_null=True, label=_("Is it in order"))
order_by = serializers.CharField(required=False, allow_null=True, allow_blank=True, label=_("order by"))

def is_valid(self, *, raise_exception=False):
super().is_valid(raise_exception=True)
Expand All @@ -146,7 +147,9 @@ def is_valid(self, *, raise_exception=False):
def list(self, with_valid=True):
if with_valid:
self.is_valid(raise_exception=True)
order_by = "create_time" if self.data.get("order_asc") is None or self.data.get("order_asc") else "-create_time"
order_by = self.data.get("order_by") or (
"create_time" if self.data.get("order_asc") is None or self.data.get("order_asc") else "-create_time"
)
return [
ChatRecordSerializerModel(chat_record).data
for chat_record in QuerySet(ChatRecord)
Expand Down Expand Up @@ -249,7 +252,9 @@ def reset_chat_record(chat_record, show_source, show_exec):
def page(self, current_page: int, page_size: int, with_valid=True, show_source=None, show_exec=None):
if with_valid:
self.is_valid(raise_exception=True)
order_by = "-create_time" if self.data.get("order_asc") is None or self.data.get("order_asc") else "create_time"
order_by = self.data.get("order_by") or (
"-create_time" if self.data.get("order_asc") is None or self.data.get("order_asc") else "create_time"
)
if show_source is None:
show_source = True
if show_exec is None:
Expand Down
1 change: 1 addition & 0 deletions apps/knowledge/serializers/document.py
Original file line number Diff line number Diff line change
Expand Up @@ -659,6 +659,7 @@ def get_query_set(self):
"paragraph_count": models.IntegerField(),
"hit_num": models.IntegerField(),
"last_hit_time": models.DateTimeField(),
"nick_name": models.CharField(),
"update_time": models.IntegerField(),
"create_time": models.DateTimeField(),
}
Expand Down
28 changes: 24 additions & 4 deletions apps/knowledge/serializers/problem.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,12 @@

import uuid_utils.compat as uuid
from django.db import transaction
from django.db import models
from django.db.models import QuerySet
from django.utils.translation import gettext_lazy as _
from rest_framework import serializers

from common.db.search import native_search, native_page_search
from common.db.search import native_search, native_page_search, get_dynamics_model
from common.exception.app_exception import AppApiException
from common.utils.common import get_file_content
from knowledge.models import Problem, ProblemParagraphMapping, Paragraph, Knowledge, LocalState, SourceType
Expand Down Expand Up @@ -264,6 +265,7 @@ class Query(serializers.Serializer):
workspace_id = serializers.CharField(required=True, label=_("workspace id"))
knowledge_id = serializers.UUIDField(required=True, label=_("knowledge id"))
content = serializers.CharField(required=False, label=_("content"))
order_by = serializers.CharField(required=False, allow_null=True, allow_blank=True, label=_("order by"))

def is_valid(self, *, raise_exception=False):
super().is_valid(raise_exception=True)
Expand All @@ -276,12 +278,30 @@ def is_valid(self, *, raise_exception=False):

def get_query_set(self):
self.is_valid()
query_set = QuerySet(model=Problem)
query_set = QuerySet(
model=get_dynamics_model(
{
"knowledge_id": models.CharField(),
"content": models.CharField(),
}
)
)
query_set = query_set.filter(**{"knowledge_id": self.data.get("knowledge_id")})
if "content" in self.data:
query_set = query_set.filter(**{"content__icontains": self.data.get("content")})
query_set = query_set.order_by("-create_time")
return query_set
order_by_query_set = QuerySet(
model=get_dynamics_model(
{
"paragraph_count": models.IntegerField(),
"hit_num": models.IntegerField(),
"last_hit_time": models.DateTimeField(),
"create_time": models.DateTimeField(),
"update_time": models.DateTimeField(),
}
)
)
order_by_query_set = order_by_query_set.order_by(self.data.get("order_by") or "-create_time")
return {"problem_query_set": query_set, "order_by_query": order_by_query_set}

def list(self):
query_set = self.get_query_set()
Expand Down
2 changes: 2 additions & 0 deletions apps/knowledge/sql/list_problem.sql
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,5 @@ SELECT problem.*,
INNER JOIN paragraph p ON ppm.paragraph_id = p.id
WHERE ppm.problem_id = problem.id AND p.local_state <> 'deleted') AS "paragraph_count"
FROM problem problem
${problem_query_set}
${order_by_query}
11 changes: 9 additions & 2 deletions apps/system_manage/serializers/chat_user.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
import uuid_utils.compat as uuid
from django.core import validators
from django.db import transaction
from django.db.models import Q, QuerySet
from django.db.models import Q, QuerySet, OuterRef, Subquery, CharField
from django.db.models.functions import Cast
from django.utils import timezone
from django.utils.translation import gettext_lazy as _
from rest_framework import serializers
Expand Down Expand Up @@ -136,6 +137,7 @@ class Query(serializers.Serializer):
email = serializers.CharField(required=False, label=_("Email"), allow_null=True, allow_blank=True)
source = serializers.CharField(required=False, label=_("Source"), allow_null=True, allow_blank=True)
is_active = serializers.BooleanField(required=False, label=_("Is active"), allow_null=True)
order_by = serializers.CharField(required=False, allow_null=True, allow_blank=True, label=_("order by"))

def get_query_set(self):
username = self.data.get("username")
Expand All @@ -154,7 +156,12 @@ def get_query_set(self):
is_active = self.data.get("is_active", None)
if is_active is not None:
query_set = query_set.filter(is_active=is_active)
query_set = query_set.order_by("-create_time")
quota_sub = ChatUserTokenQuota.objects.filter(user_id=Cast(OuterRef("pk"), output_field=CharField()))
query_set = query_set.annotate(
total_tokens=Subquery(quota_sub.values("total_tokens")[:1]),
used_tokens=Subquery(quota_sub.values("used_tokens")[:1]),
)
query_set = query_set.order_by(self.data.get("order_by") or "-create_time")
return query_set

def page(self, current_page: int, page_size: int, with_valid=True):
Expand Down
1 change: 1 addition & 0 deletions apps/system_manage/views/system_chat_user.py
Original file line number Diff line number Diff line change
Expand Up @@ -250,6 +250,7 @@ def get(self, request: Request, current_page, page_size):
"email": request.query_params.get("email", None),
"source": request.query_params.get("source", None),
"is_active": request.query_params.get("is_active", None),
"order_by": request.query_params.get("order_by", None),
"user_id": str(request.user.id),
}
)
Expand Down
Loading
Loading