|
1 | | -from random import sample |
2 | | - |
3 | 1 | from django.contrib.auth import get_user_model |
4 | 2 | from django.db.models import Q |
5 | 3 | from django_filters import rest_framework as filters |
|
10 | 8 |
|
11 | 9 | from core.permissions import IsStaffOrReadOnly |
12 | 10 | from projects.filters import ProjectFilter |
13 | | -from projects.constants import VERBOSE_STEPS, RECOMMENDATIONS_COUNT |
| 11 | +from projects.constants import VERBOSE_STEPS |
| 12 | +from projects.helpers import get_recommended_users |
14 | 13 | from projects.models import Project, Achievement |
15 | 14 | from projects.permissions import ( |
16 | 15 | IsProjectLeaderOrReadOnlyForNonDrafts, |
@@ -112,27 +111,8 @@ class ProjectRecommendedUsers(generics.RetrieveAPIView): |
112 | 111 |
|
113 | 112 | def get(self, request, pk, **kwargs): |
114 | 113 | project = self.get_object() |
115 | | - |
116 | | - # fixme: store key_skills and required_skills more convenient, not just as a string |
117 | | - all_needed_skills = set() |
118 | | - for vacancy in project.vacancies.all(): |
119 | | - all_needed_skills.update(set(vacancy.required_skills.lower().split(","))) |
120 | | - |
121 | | - recommended_users = [] |
122 | | - for user in User.objects.get_members(): |
123 | | - if user == request.user or not user.key_skills: |
124 | | - continue |
125 | | - |
126 | | - skills = set(user.key_skills.lower().split(",")) |
127 | | - if skills.intersection(all_needed_skills): |
128 | | - recommended_users.append(user) |
129 | | - |
130 | | - # get some random users |
131 | | - sampled_recommended_users = sample( |
132 | | - recommended_users, min(RECOMMENDATIONS_COUNT, len(recommended_users)) |
133 | | - ) |
134 | | - |
135 | | - serializer = self.get_serializer(sampled_recommended_users, many=True) |
| 114 | + recommended_users = get_recommended_users(project) |
| 115 | + serializer = self.get_serializer(recommended_users, many=True) |
136 | 116 | return Response(status=status.HTTP_200_OK, data=serializer.data) |
137 | 117 |
|
138 | 118 |
|
|
0 commit comments