Skip to content

Commit a0b2a97

Browse files
authored
Merge pull request #294 from PROCOLLAB-github/new_rates_post
new POST endpoint
2 parents 3fdaad1 + 1cab557 commit a0b2a97

3 files changed

Lines changed: 34 additions & 14 deletions

File tree

project_rates/serializers.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from rest_framework import serializers
22
from .models import Criteria, ProjectScore
33
from projects.models import Project
4+
from .validators import ProjectScoreValidate
45

56

67
class ProjectScoreCreateSerializer(serializers.ModelSerializer):
@@ -49,3 +50,18 @@ def get_criterias(self, obj):
4950

5051
criterias.append(copied_criteria)
5152
return criterias
53+
54+
55+
def serialize_data_func(criteria_to_get: list, data: dict):
56+
criteria = Criteria.objects.in_bulk(criteria_to_get)
57+
58+
for criterion in data:
59+
needed_criteria = criteria.get(int(criterion["criterion_id"]))
60+
61+
ProjectScoreValidate(
62+
criteria_type=needed_criteria.type,
63+
value=criterion["value"],
64+
criteria_min_value=needed_criteria.min_value,
65+
criteria_max_value=needed_criteria.max_value,
66+
)
67+
criterion["criteria_id"] = criterion.pop("criterion_id")

project_rates/urls.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from project_rates.views import RateProject, RateProjects, RateProjectsDetails
44

55
urlpatterns = [
6-
path("rate/", RateProject.as_view()),
6+
path("rate/<int:project_id>", RateProject.as_view()),
77
path("<int:program_id>", RateProjects.as_view()),
88
path("details/<int:project_id>", RateProjectsDetails.as_view()),
99
]

project_rates/views.py

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
CriteriaSerializer,
1212
ProjectScoreSerializer,
1313
ProjectScoreGetSerializer,
14+
serialize_data_func,
1415
)
1516
from users.permissions import IsExpert
1617

@@ -22,19 +23,22 @@ class RateProject(generics.CreateAPIView):
2223
permission_classes = [IsExpert]
2324

2425
def create(self, request, *args, **kwargs):
25-
try:
26-
data = self.request.data
27-
data["user"] = self.request.user.id
28-
29-
serializer = self.get_serializer(data=data)
30-
if serializer.is_valid():
31-
serializer.save()
32-
self.perform_create(serializer)
33-
return Response({"success": True}, status=status.HTTP_201_CREATED)
34-
else:
35-
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
36-
except Exception as e:
37-
return Response({"error": str(e)}, status=status.HTTP_400_BAD_REQUEST)
26+
# try:
27+
data = self.request.data
28+
29+
user = self.request.user.id
30+
project_id = self.kwargs.get("project_id")
31+
32+
criteria_to_get = []
33+
for criterion in data:
34+
criterion["user_id"] = user
35+
criterion["project_id"] = project_id
36+
criteria_to_get.append(criterion["criterion_id"])
37+
38+
serialize_data_func(criteria_to_get, data)
39+
ProjectScore.objects.bulk_create([ProjectScore(**score) for score in data])
40+
41+
return Response({"success": True}, status=status.HTTP_201_CREATED)
3842

3943

4044
class RateProjects(generics.ListAPIView):

0 commit comments

Comments
 (0)