Skip to content

Commit 45d51fb

Browse files
committed
feat; beeter subgroups
1 parent bdb5fde commit 45d51fb

File tree

3 files changed

+38
-14
lines changed

3 files changed

+38
-14
lines changed

apps/accounts/serializers.py

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@
66
from django.shortcuts import get_object_or_404
77
from drf_spectacular.utils import extend_schema_serializer
88
from rest_framework import serializers
9-
from services.crisalid.serializers import ResearcherSerializerLight
10-
from services.translator.serializers import AutoTranslatedModelSerializer
119

1210
from apps.commons.fields import (
1311
HiddenPrimaryKeyRelatedField,
@@ -30,6 +28,8 @@
3028
from apps.projects.models import Project
3129
from apps.skills.models import Skill
3230
from apps.skills.serializers import SkillLightSerializer, TagSerializer
31+
from services.crisalid.serializers import ResearcherSerializerLight
32+
from services.translator.serializers import AutoTranslatedModelSerializer
3333

3434
from .exceptions import (
3535
FeaturedProjectPermissionDeniedError,
@@ -253,10 +253,9 @@ class Meta:
253253

254254

255255
class PeopleGroupLightSerializer(
256-
AutoTranslatedModelSerializer, serializers.ModelSerializer
256+
ModulesSerializers, AutoTranslatedModelSerializer, serializers.ModelSerializer
257257
):
258258
header_image = ImageSerializer(read_only=True)
259-
members_count = serializers.SerializerMethodField()
260259
roles = serializers.SlugRelatedField(
261260
many=True,
262261
slug_field="name",
@@ -265,10 +264,6 @@ class PeopleGroupLightSerializer(
265264
)
266265
organization = serializers.SlugRelatedField(read_only=True, slug_field="code")
267266

268-
# TODO(remi): replace this by modules
269-
def get_members_count(self, group: PeopleGroup) -> int:
270-
return group.get_all_members().count()
271-
272267
class Meta:
273268
model = PeopleGroup
274269
read_only_fields = ["organization", "is_root", "publication_status"]
@@ -280,12 +275,25 @@ class Meta:
280275
"short_description",
281276
"email",
282277
"header_image",
283-
"members_count",
284278
"roles",
279+
"modules",
285280
]
286281

282+
def get_modules(self, people_group: PeopleGroup):
283+
context = self.context
284+
request = context.get("request")
285+
286+
modules_manager = people_group.get_related_module()
287+
modules = modules_manager(people_group, request.user)
288+
289+
return {
290+
"members": modules.members().count(),
291+
"subgroups": modules.subgroups().count(),
292+
}
293+
287294

288295
class PeopleGroupHierarchySerializer(
296+
ModulesSerializers,
289297
AutoTranslatedModelSerializer,
290298
serializers.ModelSerializer,
291299
):
@@ -308,13 +316,27 @@ class Meta:
308316
"header_image",
309317
"children",
310318
"roles",
319+
"modules",
311320
]
312321
fields = read_only_fields
313322

323+
def get_modules(self, people_group: PeopleGroup):
324+
context = self.context
325+
request = context.get("request")
326+
327+
modules_manager = people_group.get_related_module()
328+
modules = modules_manager(people_group, request.user)
329+
330+
return {
331+
"members": modules.members().count(),
332+
"subgroups": modules.subgroups().count(),
333+
}
334+
314335
def get_children(self, people_group: PeopleGroup) -> list[dict[str, str | int]]:
315336
context = self.context
316337
request = context.get("request")
317338
mapping = context.get("mapping")
339+
318340
if not mapping:
319341
base_queryset = request.user.get_people_group_queryset().filter(
320342
organization=people_group.organization
@@ -432,7 +454,6 @@ class PeopleGroupSerializer(
432454
slug_field="code", queryset=Organization.objects.all()
433455
)
434456
hierarchy = serializers.SerializerMethodField()
435-
# children = serializers.SerializerMethodField()
436457
parent = serializers.PrimaryKeyRelatedField(
437458
queryset=PeopleGroup.objects.all(),
438459
required=False,

apps/accounts/views.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -834,7 +834,7 @@ def similars(self, request, *args, **kwargs):
834834
queryset = modules.similars()
835835

836836
queryset_page = self.paginate_queryset(queryset)
837-
data = self.serializer_class(
837+
data = PeopleGroupLightSerializer(
838838
queryset_page, many=True, context={"request": request}
839839
)
840840
return self.get_paginated_response(data.data)

apps/modules/base.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,24 @@ def __init__(self, instance, /, user, **kw):
1010
self.instance = instance
1111
self.user = user
1212

13-
def count(self):
13+
def _items(self):
1414
members = inspect.getmembers(
1515
self,
1616
predicate=inspect.ismethod,
1717
)
1818

19-
modules = {}
2019
for name, func in members:
2120
# ignore private_method and "count" method (this method :D)
2221
if name.startswith("_") or name in ("count",):
2322
continue
2423

24+
yield name, func
25+
26+
def count(self):
27+
modules = {}
28+
for name, func in self._items():
2529
# func return queryset
2630
modules[name] = func().count()
27-
2831
return modules
2932

3033

0 commit comments

Comments
 (0)