Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions users/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ class Meta:
"last_name",
"patronymic",
"speciality",
"birthday",
"avatar",
"city",
"is_active",
Expand Down
11 changes: 5 additions & 6 deletions users/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@
UserListSerializer,
VerifyEmailSerializer,
)

from .filters import UserFilter

User = get_user_model()
Expand Down Expand Up @@ -77,10 +76,10 @@ def post(self, request, *args, **kwargs):
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)


class UserAdditionalRolesView(GenericAPIView):
class UserAdditionalRolesView(APIView):
permission_classes = [AllowAny]

def get(self, request, format=None):
def get(self, request):
"""
Return a tuple of user additional roles types.
"""
Expand All @@ -105,19 +104,19 @@ class UserDetail(RetrieveUpdateDestroyAPIView):
serializer_class = UserDetailSerializer


class CurrentUser(APIView):
class CurrentUser(GenericAPIView):
queryset = User.objects.get_users_for_detail_view()
permission_classes = [IsAuthenticated]
serializer_class = UserDetailSerializer

def get(self, request):
user = request.user
serializer = UserDetailSerializer(user)
serializer = self.get_serializer(user)
return Response(serializer.data, status=status.HTTP_200_OK)


class UserTypesView(APIView):
def get(self, request, format=None):
def get(self, request):
"""
Return a list of tuples [(id, name), ..] of user types.
"""
Expand Down
29 changes: 29 additions & 0 deletions vacancy/serializers.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
from django.contrib.auth import get_user_model
from rest_framework import serializers

from projects.models import Project
from users.serializers import UserDetailSerializer
from vacancy.models import Vacancy, VacancyResponse

User = get_user_model()


class ProjectForVacancySerializer(serializers.ModelSerializer):
class Meta:
Expand Down Expand Up @@ -62,16 +65,42 @@ class Meta:
class VacancyResponseListSerializer(serializers.ModelSerializer):
is_approved = serializers.BooleanField(read_only=True)
user = UserDetailSerializer(read_only=True)
user_id = serializers.IntegerField(write_only=True)

class Meta:
model = VacancyResponse
fields = [
"id",
"user",
"user_id",
"why_me",
"is_approved",
"vacancy",
]
extra_kwargs = {
"user_id": {"write_only": True},
}

def validate(self, attrs):
vacancy = attrs["vacancy"]
user = self.validate_user_exists(attrs["user_id"])

if VacancyResponse.objects.filter(vacancy=vacancy, user=user).exists():
raise serializers.ValidationError("Vacancy response already exists")
return attrs

def validate_user_exists(self, value):
try:
user = User.objects.get(pk=value)
except User.DoesNotExist:
raise serializers.ValidationError("User does not exist")
return user

def create(self, validated_data):
user_id = validated_data.pop("user_id")
user = User.objects.get(pk=user_id)
vacancy_response = VacancyResponse.objects.create(user=user, **validated_data)
return vacancy_response


class VacancyResponseDetailSerializer(serializers.ModelSerializer):
Expand Down
2 changes: 1 addition & 1 deletion vacancy/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
urlpatterns = [
path("", VacancyList.as_view()),
path("<int:pk>/", VacancyDetail.as_view()),
path("<int:pk>/responses/", VacancyResponseList.as_view()),
path("<int:vacancy_id>/responses/", VacancyResponseList.as_view()),
path("responses/<int:pk>/", VacancyResponseDetail.as_view()),
path("responses/<int:pk>/accept", VacancyResponseAccept.as_view()),
path("responses/<int:pk>/decline", VacancyResponseDecline.as_view()),
Expand Down
12 changes: 7 additions & 5 deletions vacancy/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,16 +67,18 @@ def get(self, request, *args, **kwargs):

def get_queryset(self):
return VacancyResponse.objects.get_vacancy_response_for_list_view().filter(
vacancy__id=self.kwargs["pk"]
vacancy__id=self.kwargs["vacancy_id"]
)

def post(self, request, pk):
def post(self, request, vacancy_id):
try:
request.data["user"] = self.request.user.id
request.data["vacancy"] = pk
request.data["user_id"] = self.request.user.id
request.data["vacancy"] = vacancy_id
except AttributeError:
pass
return self.create(request, pk)
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
return self.create(request, vacancy_id)


class VacancyResponseDetail(generics.RetrieveUpdateDestroyAPIView):
Expand Down