Skip to content

Commit bdb5fde

Browse files
committed
feat: subgroups in modules
1 parent fb4034b commit bdb5fde

File tree

3 files changed

+30
-19
lines changed

3 files changed

+30
-19
lines changed

apps/accounts/serializers.py

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
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
911

1012
from apps.commons.fields import (
1113
HiddenPrimaryKeyRelatedField,
@@ -28,8 +30,6 @@
2830
from apps.projects.models import Project
2931
from apps.skills.models import Skill
3032
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,
@@ -432,7 +432,7 @@ class PeopleGroupSerializer(
432432
slug_field="code", queryset=Organization.objects.all()
433433
)
434434
hierarchy = serializers.SerializerMethodField()
435-
children = serializers.SerializerMethodField()
435+
# children = serializers.SerializerMethodField()
436436
parent = serializers.PrimaryKeyRelatedField(
437437
queryset=PeopleGroup.objects.all(),
438438
required=False,
@@ -466,19 +466,6 @@ def get_hierarchy(self, obj: PeopleGroup) -> list[dict[str, str | int]]:
466466
)
467467
return [{"order": i, **h} for i, h in enumerate(hierarchy[::-1])]
468468

469-
def get_children(self, obj: PeopleGroup) -> list[dict[str, str | int]]:
470-
request = self.context.get("request")
471-
queryset = (
472-
request.user.get_people_group_queryset()
473-
.select_related("organization")
474-
.filter(parent=obj)
475-
.order_by("name")
476-
.distinct()
477-
)
478-
return PeopleGroupSuperLightSerializer(
479-
queryset, many=True, context=self.context
480-
).data
481-
482469
def validate_featured_projects(self, projects: list[Project]) -> list[Project]:
483470
request = self.context.get("request")
484471
if not all(request.user.can_see_project(project) for project in projects):
@@ -556,7 +543,6 @@ class Meta:
556543
"parent",
557544
"organization",
558545
"hierarchy",
559-
"children",
560546
"header_image",
561547
"logo_image",
562548
"roles",

apps/accounts/views.py

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -803,15 +803,35 @@ def hierarchy(self, request, *args, **kwargs):
803803
status=status.HTTP_200_OK,
804804
)
805805

806+
@action(
807+
detail=True,
808+
methods=["GET"],
809+
url_path="subgroups",
810+
permission_classes=[ReadOnly],
811+
)
812+
def subgroups(self, request, *args, **kwargs):
813+
group = self.get_object()
814+
modules_manager = group.get_related_module()
815+
modules = modules_manager(group, request.user)
816+
queryset = modules.subgroups()
817+
818+
queryset_page = self.paginate_queryset(queryset)
819+
data = self.serializer_class(
820+
queryset_page, many=True, context={"request": request}
821+
)
822+
return self.get_paginated_response(data.data)
823+
806824
@action(
807825
detail=True,
808826
methods=["GET"],
809827
url_path="similars",
810828
permission_classes=[ReadOnly],
811829
)
812830
def similars(self, request, *args, **kwargs):
813-
obj: PeopleGroup = self.get_object()
814-
queryset = obj.similars()
831+
group = self.get_object()
832+
modules_manager = group.get_related_module()
833+
modules = modules_manager(group, request.user)
834+
queryset = modules.similars()
815835

816836
queryset_page = self.paginate_queryset(queryset)
817837
data = self.serializer_class(

apps/modules/group.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111

1212
@register_module(PeopleGroup)
1313
class PeopleGroupModules(AbstractModules):
14+
instance: PeopleGroup
15+
1416
def members(self) -> QuerySet[ProjectUser]:
1517
managers_ids = self.instance.managers.all().values_list("id", flat=True)
1618
leaders_ids = self.instance.leaders.all().values_list("id", flat=True)
@@ -62,6 +64,9 @@ def featured_projects(self) -> QuerySet[Project]:
6264
def similars(self) -> QuerySet[PeopleGroup]:
6365
return self.instance.similars()
6466

67+
def subgroups(self) -> QuerySet[PeopleGroup]:
68+
return self.instance.children.all()
69+
6570
@cached_property
6671
def _is_structure(self):
6772
try:

0 commit comments

Comments
 (0)