@@ -49,6 +49,60 @@ def get_format_time(date_time):
4949
5050
5151class HomePageSerializer (serializers .Serializer ):
52+ class ChatRecordAggregation (serializers .Serializer ):
53+ workspace_id = serializers .CharField (required = False , label = _ ("Workspace ID" ))
54+ user_id = serializers .UUIDField (required = True , label = _ ("User ID" ))
55+ start_time = serializers .DateField (format = '%Y-%m-%d' , label = _ ("Start time" ))
56+ end_time = serializers .DateField (format = '%Y-%m-%d' , label = _ ("End time" ))
57+
58+ def aggregation (self , auth , with_valid = True ):
59+ if with_valid :
60+ self .is_valid (raise_exception = True )
61+ data = self .validated_data
62+ user_id = data ["user_id" ]
63+ workspace_id = data .get ("workspace_id" )
64+ start_time = get_format_time (data ["start_time" ])
65+ end_time = get_format_time (data ["end_time" ])
66+ workspace_manage = is_workspace_manage (auth , workspace_id )
67+ query = ChatRecord .objects .filter (
68+ create_time__gte = start_time ,
69+ create_time__lte = end_time ,
70+ )
71+ if workspace_manage :
72+ query = query .filter (
73+ chat__application__workspace_id = workspace_id
74+ )
75+
76+ else :
77+ permission_list = (
78+ ["VIEW" , "MANAGE" , "ROLE" ]
79+ if hasPermission (auth , "APPLICATION:READ" )
80+ else ["VIEW" , "MANAGE" ]
81+ )
82+ permission_subquery = (
83+ WorkspaceUserResourcePermission .objects
84+ .filter (
85+ workspace_id = workspace_id ,
86+ user_id = user_id ,
87+ auth_type = "APPLICATION" ,
88+ permission_list__overlap = permission_list
89+ )
90+ .annotate (
91+ target_uuid = Cast (
92+ "target" ,
93+ output_field = UUIDField ()
94+ )
95+ )
96+ .values ("target_uuid" )
97+ )
98+ query = query .filter (
99+ chat__application_id__in = permission_subquery
100+ )
101+
102+ return query .aggregate (
103+ total_count = Count ("id" )
104+ )["total_count" ]
105+
52106 class TokensAggregation (serializers .Serializer ):
53107 workspace_id = serializers .CharField (required = False , label = _ ("Workspace ID" ))
54108 user_id = serializers .UUIDField (required = True , label = _ ("User ID" ))
0 commit comments