|
40 | 40 | from apps.files.views import ImageStorageView |
41 | 41 | from apps.organizations.models import Organization |
42 | 42 | from apps.organizations.permissions import HasOrganizationPermission |
43 | | -from apps.projects.models import Project |
44 | 43 | from apps.projects.serializers import ProjectLightSerializer |
45 | 44 | from apps.skills.models import Skill |
46 | 45 | from services.google.models import GoogleAccount, GoogleGroup |
@@ -682,27 +681,10 @@ def remove_member(self, request, *args, **kwargs): |
682 | 681 | ) |
683 | 682 | def member(self, request, *args, **kwargs): |
684 | 683 | group = self.get_object() |
685 | | - managers_ids = group.managers.all().values_list("id", flat=True) |
686 | | - leaders_ids = group.leaders.all().values_list("id", flat=True) |
687 | | - skills_prefetch = Prefetch( |
688 | | - "skills", queryset=Skill.objects.select_related("tag") |
689 | | - ) |
690 | | - queryset = ( |
691 | | - group.get_all_members() |
692 | | - .distinct() |
693 | | - .annotate( |
694 | | - is_leader=Case( |
695 | | - When(id__in=leaders_ids, then=True), default=Value(False) |
696 | | - ) |
697 | | - ) |
698 | | - .annotate( |
699 | | - is_manager=Case( |
700 | | - When(id__in=managers_ids, then=True), default=Value(False) |
701 | | - ) |
702 | | - ) |
703 | | - .order_by("-is_leader", "-is_manager") |
704 | | - .prefetch_related(skills_prefetch, "groups") |
705 | | - ) |
| 684 | + |
| 685 | + cls = group.get_related_module() |
| 686 | + module = cls(group, request.user) |
| 687 | + queryset = module.members() |
706 | 688 |
|
707 | 689 | page = self.paginate_queryset(queryset) |
708 | 690 | if page is not None: |
@@ -790,26 +772,10 @@ def remove_featured_project(self, request, *args, **kwargs): |
790 | 772 | ) |
791 | 773 | def project(self, request, *args, **kwargs): |
792 | 774 | group = self.get_object() |
793 | | - group_projects_ids = ( |
794 | | - Project.objects.filter(groups__people_groups=group) |
795 | | - .distinct() |
796 | | - .values_list("id", flat=True) |
797 | | - ) |
798 | | - queryset = ( |
799 | | - self.request.user.get_project_queryset() |
800 | | - .filter(Q(groups__people_groups=group) | Q(people_groups=group)) |
801 | | - .annotate( |
802 | | - is_group_project=Case( |
803 | | - When(id__in=group_projects_ids, then=True), default=Value(False) |
804 | | - ), |
805 | | - is_featured=Case( |
806 | | - When(people_groups=group, then=True), default=Value(False) |
807 | | - ), |
808 | | - ) |
809 | | - .distinct() |
810 | | - .order_by("-is_featured", "-is_group_project") |
811 | | - .prefetch_related("categories") |
812 | | - ) |
| 775 | + cls = group.get_related_module() |
| 776 | + module = cls(group, request.user) |
| 777 | + queryset = module.featured_projects() |
| 778 | + |
813 | 779 | page = self.paginate_queryset(queryset) |
814 | 780 | if page is not None: |
815 | 781 | project_serializer = ProjectLightSerializer( |
|
0 commit comments