Skip to content

Commit dbd4adb

Browse files
committed
Удалены legacy skills endpoints из users API
1 parent e1d1d01 commit dbd4adb

File tree

4 files changed

+20
-141
lines changed

4 files changed

+20
-141
lines changed

users/serializers.py

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -378,22 +378,6 @@ class Meta:
378378
]
379379
read_only_fields = ["leader", "collaborator", "is_company"]
380380

381-
382-
class SubscriptionSerializer(serializers.Serializer):
383-
id = serializers.IntegerField()
384-
name = serializers.CharField()
385-
price = serializers.IntegerField()
386-
features_list = serializers.ListField(child=serializers.CharField())
387-
388-
389-
class UserSubscriptionDataSerializer(serializers.Serializer):
390-
is_subscribed = serializers.BooleanField()
391-
last_subscription_date = serializers.CharField()
392-
subscription_date_over = serializers.CharField()
393-
last_subscription_type = SubscriptionSerializer()
394-
is_autopay_allowed = serializers.BooleanField()
395-
396-
397381
class UserExperienceMixin:
398382
"""Mixin for Education and WorkExperience with same logic."""
399383

@@ -991,12 +975,6 @@ def validate(self, data):
991975
return validate_project(data)
992976

993977

994-
class UserCloneDataSerializer(serializers.ModelSerializer):
995-
class Meta:
996-
model = CustomUser
997-
fields = "__all__"
998-
999-
1000978
class CustomObtainPairSerializer(TokenObtainPairSerializer):
1001979
def validate(self, attrs):
1002980
data = super().validate(attrs)
@@ -1008,8 +986,3 @@ def get_token(cls, user):
1008986
token = super().get_token(user)
1009987
token["email"] = user.email
1010988
return token
1011-
1012-
1013-
class RemoteBuySubSerializer(serializers.Serializer):
1014-
subscription_id = serializers.IntegerField()
1015-
redirect_url = serializers.CharField(required=False)

users/tests.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44

55
from projects.models import Collaborator, Project
66
from users.models import CustomUser
7-
from users.views import UserLeaderProjectsList, UserList, UserDetail
7+
from users.serializers import UserDetailSerializer
8+
from users.views import CurrentUser, UserLeaderProjectsList, UserList, UserDetail
89

910

1011
class UserTestCase(TestCase):
@@ -13,6 +14,7 @@ def setUp(self):
1314
self.user_list_view = UserList.as_view()
1415
self.user_detail_view = UserDetail.as_view()
1516
self.user_leader_projects_view = UserLeaderProjectsList.as_view()
17+
self.current_user_view = CurrentUser.as_view()
1618

1719
def test_user_creation(self):
1820
request = self.factory.post("auth/users/", USER_CREATE_DATA)
@@ -83,6 +85,22 @@ def test_user_leader_projects_list(self):
8385
returned_ids, {leader_project.id, second_leader_project.id}
8486
)
8587

88+
def test_current_user_returns_authenticated_user_profile(self):
89+
user = self._user_create("current@example.com")
90+
91+
request = self.factory.get("auth/users/current/")
92+
force_authenticate(request, user=user)
93+
response = self.current_user_view(request)
94+
expected_data = UserDetailSerializer(user, context={"request": request}).data
95+
96+
self.assertEqual(response.status_code, 200)
97+
self.assertEqual(response.data, expected_data)
98+
99+
def test_removed_legacy_routes_return_404(self):
100+
self.assertEqual(self.client.get("/auth/users/clone-data").status_code, 404)
101+
self.assertEqual(self.client.get("/auth/subscription/").status_code, 404)
102+
self.assertEqual(self.client.post("/auth/subscription/buy/").status_code, 404)
103+
86104
def _user_create(self, email):
87105
tmp_create_data = USER_CREATE_DATA.copy()
88106
tmp_create_data["email"] = email

users/urls.py

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,6 @@
2626
UserSpecializationsNestedView,
2727
UserSpecializationsInlineView,
2828
UserSkillsApproveDeclineView,
29-
SingleUserDataView,
30-
RemoteViewSubscriptions,
31-
RemoteCreatePayment,
3229
UserCVDownload,
3330
UserCVMailing,
3431
)
@@ -86,9 +83,4 @@
8683
"reset_password/",
8784
include("django_rest_passwordreset.urls", namespace="password_reset"),
8885
),
89-
# for skills
90-
path("users/clone-data", SingleUserDataView.as_view()),
91-
# copy from skills
92-
path("subscription/", RemoteViewSubscriptions.as_view()),
93-
path("subscription/buy/", RemoteCreatePayment.as_view()),
9486
]

users/views.py

Lines changed: 1 addition & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import urllib.parse
22

33
import jwt
4-
import requests
54
from django.apps import apps
65
from django.conf import settings
76
from django.contrib.auth import get_user_model
@@ -54,18 +53,15 @@
5453
AchievementDetailSerializer,
5554
AchievementListSerializer,
5655
PublicUserSerializer,
57-
RemoteBuySubSerializer,
5856
ResendVerifyEmailSerializer,
5957
SpecializationSerializer,
6058
SpecializationsSerializer,
6159
UserApproveSkillResponse,
62-
UserCloneDataSerializer,
6360
UserDetailSerializer,
6461
UserListSerializer,
6562
UserProjectListSerializer,
6663
UserSkillConfirmationSerializer,
6764
UserSubscribedProjectsSerializer,
68-
UserSubscriptionDataSerializer,
6965
VerifyEmailSerializer,
7066
)
7167
from users.typing import UserCVDataV2
@@ -261,31 +257,7 @@ class CurrentUser(GenericAPIView):
261257
def get(self, request):
262258
user = request.user
263259
serializer = self.get_serializer(user)
264-
265-
if settings.DEBUG:
266-
skills_url_name = (
267-
"https://skills.dev.procollab.ru/progress/subscription-data/"
268-
)
269-
else:
270-
skills_url_name = (
271-
"https://api.skills.procollab.ru/progress/subscription-data/"
272-
)
273-
try:
274-
subscription_data = requests.get(
275-
skills_url_name,
276-
headers={
277-
"accept": "application/json",
278-
"Authorization": request.META.get("HTTP_AUTHORIZATION"),
279-
},
280-
)
281-
subscription_serializer = UserSubscriptionDataSerializer(
282-
subscription_data.json()
283-
)
284-
subs_data = subscription_serializer.data
285-
except Exception:
286-
subs_data = {}
287-
288-
return Response(serializer.data | subs_data, status=status.HTTP_200_OK)
260+
return Response(serializer.data, status=status.HTTP_200_OK)
289261

290262

291263
class UserTypesView(APIView):
@@ -575,82 +547,6 @@ def get_queryset(self):
575547
return Specialization.objects.all()
576548

577549

578-
class SingleUserDataView(ListAPIView):
579-
serializer_class = UserCloneDataSerializer
580-
permissions = [AllowAny]
581-
authentication_off = True
582-
583-
def get_queryset(self) -> User:
584-
return [get_object_or_404(User, email=self.request.data["email"])]
585-
586-
587-
class RemoteViewSubscriptions(APIView):
588-
permission_classes = [AllowAny]
589-
590-
def get(self, request, *args, **kwargs):
591-
try:
592-
subscriptions = self._get_response_from_remote_api()
593-
return Response(subscriptions, status=status.HTTP_200_OK)
594-
except requests.RequestException as e:
595-
return Response({"error": str(e)}, status=status.HTTP_400_BAD_REQUEST)
596-
597-
def _get_link_to_remote_api(self) -> str:
598-
# TODO something to reuse this code
599-
if settings.DEBUG:
600-
subscriptions_url = "https://skills.dev.procollab.ru/subscription/"
601-
else:
602-
subscriptions_url = "https://api.skills.procollab.ru/subscription/"
603-
return subscriptions_url
604-
605-
def _get_response_from_remote_api(self):
606-
subscriptions_url = self._get_link_to_remote_api()
607-
response = requests.get(
608-
subscriptions_url,
609-
headers={
610-
"accept": "application/json",
611-
"Authorization": self.request.META.get("HTTP_AUTHORIZATION"),
612-
},
613-
)
614-
response.raise_for_status()
615-
return response.json()
616-
617-
618-
class RemoteCreatePayment(GenericAPIView):
619-
serializer_class = RemoteBuySubSerializer
620-
permission_classes = [AllowAny]
621-
622-
def post(self, request, *args, **kwargs):
623-
try:
624-
subscriptions_buy_url = self._get_link_to_remote_api()
625-
data, headers = self._get_data_to_request_remote_api()
626-
response = requests.post(subscriptions_buy_url, json=data, headers=headers)
627-
response.raise_for_status()
628-
return Response(response.json(), status=status.HTTP_200_OK)
629-
except requests.RequestException as e:
630-
return Response({"error": str(e)}, status=status.HTTP_400_BAD_REQUEST)
631-
632-
def _get_link_to_remote_api(self) -> str:
633-
# TODO something to reuse this code
634-
if settings.DEBUG:
635-
subscriptions_buy_url = "https://skills.dev.procollab.ru/subscription/buy/"
636-
else:
637-
subscriptions_buy_url = "https://api.skills.procollab.ru/subscription/buy/"
638-
return subscriptions_buy_url
639-
640-
def _get_data_to_request_remote_api(self) -> tuple[dict, dict]:
641-
serializer = self.serializer_class(data=self.request.data)
642-
if serializer.is_valid():
643-
data = serializer.validated_data
644-
headers = {
645-
"accept": "application/json",
646-
"Authorization": self.request.META.get("HTTP_AUTHORIZATION"),
647-
}
648-
return data, headers
649-
650-
else:
651-
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
652-
653-
654550
class UserCVDownload(APIView):
655551
permission_classes = [IsAuthenticated]
656552

0 commit comments

Comments
 (0)