diff --git a/apps/homepage/api/home_page_api.py b/apps/homepage/api/home_page_api.py index f0796e7fac1..261acf63720 100644 --- a/apps/homepage/api/home_page_api.py +++ b/apps/homepage/api/home_page_api.py @@ -76,6 +76,12 @@ def get_parameters(): type=OpenApiTypes.STR, required=True, ), + OpenApiParameter( + name="name", + description="Name", + type=OpenApiTypes.STR, + required=False, + ), OpenApiParameter( name="end_time", description="end Time", diff --git a/apps/homepage/serializers/homepage.py b/apps/homepage/serializers/homepage.py index 47a8cfede1a..e554080bd43 100644 --- a/apps/homepage/serializers/homepage.py +++ b/apps/homepage/serializers/homepage.py @@ -112,6 +112,7 @@ class ApplicationUserTokenRanking(serializers.Serializer): workspace_id = serializers.CharField(required=False, label=_("Workspace ID")) user_id = serializers.UUIDField(required=True, label=_("User ID")) start_time = serializers.DateField(format='%Y-%m-%d', label=_("Start time")) + name = serializers.CharField(required=False, allow_null=True, allow_blank=True, label=_("User Name")) end_time = serializers.DateField(format='%Y-%m-%d', label=_("End time")) def ranking(self, auth, current_page, page_size, with_valid=True): @@ -122,6 +123,7 @@ def ranking(self, auth, current_page, page_size, with_valid=True): user_id = self.validated_data.get("user_id") start_time = get_format_time(self.data.get("start_time")) end_time = get_format_time(self.data.get("end_time")) + name = self.data.get("name") base_queryset = Chat.objects.filter( is_deleted=False, chat_user_id__isnull=False, @@ -130,6 +132,8 @@ def ranking(self, auth, current_page, page_size, with_valid=True): ).exclude( chat_user_id="" ) + if name: + base_queryset = base_queryset.filter(asker__username__contains=name) workspace_manage = is_workspace_manage(auth, workspace_id) if workspace_manage: @@ -210,6 +214,7 @@ def ranking(self, auth, current_page, page_size, with_valid=True): class ApplicationQuestionRanking(serializers.Serializer): workspace_id = serializers.CharField(required=False, label=_('Workspace ID')) user_id = serializers.UUIDField(required=True, label=_("User ID")) + name = serializers.CharField(required=False, allow_null=True, allow_blank=True, label=_("Application Name")) start_time = serializers.DateField(format='%Y-%m-%d', label=_("Start time")) end_time = serializers.DateField(format='%Y-%m-%d', label=_("End time")) @@ -220,6 +225,9 @@ def ranking(self, auth, current_page, page_size, with_valid=True): workspace_id = self.validated_data.get("workspace_id") user_id = self.validated_data.get("user_id") queryset = Application.objects.filter(workspace_id=workspace_id) + name = self.data.get("name") + if name: + queryset = queryset.filter(name__contains=name) start_time = get_format_time(self.data.get("start_time")) end_time = get_format_time(self.data.get("end_time")) queryset = queryset.filter( @@ -287,6 +295,7 @@ def ranking(self, auth, current_page, page_size, with_valid=True): class ApplicationTokensRanking(serializers.Serializer): workspace_id = serializers.CharField(required=False, label=_('Workspace ID')) user_id = serializers.UUIDField(required=True, label=_("User ID")) + name = serializers.CharField(required=False, allow_null=True, allow_blank=True, label=_("Application Name")) start_time = serializers.DateField(format='%Y-%m-%d', label=_("Start time")) end_time = serializers.DateField(format='%Y-%m-%d', label=_("End time")) @@ -295,6 +304,7 @@ def ranking(self, auth, current_page, page_size, with_valid=True): self.is_valid(raise_exception=True) start_time = get_format_time(self.data.get('start_time')) end_time = get_format_time(self.data.get('end_time')) + name = self.data.get("name") workspace_id = self.data.get("workspace_id") user_id = self.data.get("user_id") @@ -306,6 +316,8 @@ def ranking(self, auth, current_page, page_size, with_valid=True): queryset = Application.objects.filter( create_time__gte=start_time, create_time__lte=end_time) + if name: + queryset = queryset.filter(name__contains=name) workspace_manage = is_workspace_manage(auth, workspace_id) diff --git a/apps/homepage/views/homepage.py b/apps/homepage/views/homepage.py index 758538284f6..31e898e291a 100644 --- a/apps/homepage/views/homepage.py +++ b/apps/homepage/views/homepage.py @@ -63,28 +63,30 @@ def get(self, request: Request, workspace_id: str, current_page: int, page_size: 'start_time': request.query_params.get( 'start_time'), 'end_time': request.query_params.get( - 'end_time') + 'end_time'), + "name": request.query_params.get("name") }).ranking(request.auth, current_page, page_size)) - @extend_schema( - methods=["GET"], - description=_("Top applications by question count"), - summary=_("Top applications by question count"), - operation_id="homepage_application_question_ranking", - parameters=ApplicationQuestionRankingAPI.get_parameters(), - responses=ApplicationQuestionRankingAPI.get_response(), - tags=[_("Home page")], - ) class ApplicationQuestionRanking(APIView): authentication_classes = [TokenAuth] + @extend_schema( + methods=["GET"], + description=_("Top applications by question count"), + summary=_("Top applications by question count"), + operation_id="homepage_application_question_ranking", + parameters=ApplicationQuestionRankingAPI.get_parameters(), + responses=ApplicationQuestionRankingAPI.get_response(), + tags=[_("Home page")], + ) def get(self, request: Request, workspace_id: str, current_page: int, page_size: int): return result.success(HomePageSerializer.ApplicationQuestionRanking( data={'user_id': request.user.id, 'workspace_id': workspace_id, 'start_time': request.query_params.get( 'start_time'), 'end_time': request.query_params.get( - 'end_time') + 'end_time'), + "name": request.query_params.get("name") }).ranking(request.auth, current_page, page_size)) class UserTokensRanking(APIView): @@ -105,7 +107,8 @@ def get(self, request: Request, workspace_id: str, current_page: int, page_size: 'start_time': request.query_params.get( 'start_time'), 'end_time': request.query_params.get( - 'end_time')}) + 'end_time'), + "name": request.query_params.get("name")}) .ranking(request.auth, current_page, page_size)) class ApplicationMonitoring(APIView):