Skip to content

Commit e236d9c

Browse files
committed
Fix export users activity
1 parent a8c48f8 commit e236d9c

1 file changed

Lines changed: 44 additions & 10 deletions

File tree

users/services/users_activity.py

Lines changed: 44 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,15 @@
44
from django.contrib.contenttypes.models import ContentType
55

66
from django.db.models import (
7+
Q,
78
Count,
9+
Value,
810
QuerySet,
911
OuterRef,
1012
Subquery,
1113
IntegerField,
1214
)
15+
from django.db.models.functions import Coalesce
1316

1417
from users.models import CustomUser
1518
from news.models import News
@@ -90,18 +93,33 @@ def __prepare_user_data(self, user: CustomUser) -> dict[str, Any]:
9093

9194
def __get_user_queryset(self) -> QuerySet[CustomUser]:
9295
user_content_type = ContentType.objects.get_for_model(CustomUser)
93-
projects_in_program_subqury = (
96+
projects_in_program_subquery = (
9497
PartnerProgramUserProfile.objects
9598
.filter(user_id=OuterRef("id"))
9699
.exclude(project=None)
97-
.annotate(count=Count("id"))
98-
.values("count")
100+
.values("user_id")
101+
.annotate(total=Count("id"))
102+
.values("total")
99103
)
100-
posts_count_subqury = (
104+
posts_count_subquery = (
101105
News.objects
102106
.filter(content_type=user_content_type, object_id=OuterRef("id"))
103-
.annotate(count=Count("id"))
104-
.values("count")
107+
.values("object_id")
108+
.annotate(total=Count("id"))
109+
.values("total")
110+
)
111+
likes_count_subquery = (
112+
CustomUser.objects
113+
.filter(likes__user_id=OuterRef("id"))
114+
.annotate(total_likes=Count("likes"))
115+
.values("total_likes")
116+
)
117+
118+
projects_in_program_subquery = (
119+
CustomUser.objects
120+
.filter(partner_program_profiles__user_id=OuterRef("id"))
121+
.annotate(total_proj=Count("id"))
122+
.values("total_proj")
105123
)
106124

107125
users: QuerySet[CustomUser] = (
@@ -116,11 +134,27 @@ def __get_user_queryset(self) -> QuerySet[CustomUser]:
116134
"partner_program_profiles__partner_program",
117135
)
118136
.annotate(
119-
likes_count=Count("likes"),
120137
projects_count=Count("leaders_projects"),
121-
program_profiles_count=Count("partner_program_profiles"),
122-
projects_in_program=Subquery(projects_in_program_subqury, output_field=IntegerField()),
123-
posts_count=Subquery(posts_count_subqury, output_field=IntegerField()),
138+
likes_count=Coalesce(
139+
Subquery(likes_count_subquery, output_field=IntegerField()),
140+
Value(0),
141+
output_field=IntegerField(),
142+
),
143+
program_profiles_count=Coalesce(
144+
Subquery(projects_in_program_subquery, output_field=IntegerField()),
145+
Value(0),
146+
output_field=IntegerField(),
147+
),
148+
projects_in_program=Coalesce(
149+
Subquery(projects_in_program_subquery, output_field=IntegerField()),
150+
Value(0),
151+
output_field=IntegerField(),
152+
),
153+
posts_count=Coalesce(
154+
Subquery(posts_count_subquery, output_field=IntegerField()),
155+
Value(0),
156+
output_field=IntegerField(),
157+
),
124158
)
125159
)
126160
return users

0 commit comments

Comments
 (0)