fix permissions check and add new transaction write action
This commit is contained in:
@@ -18,12 +18,13 @@ from .serializers import RouteSerializer, CreateRouteSerializer, CitySerializer,
|
||||
from api.auth.serializers import UserResponseSerializer
|
||||
from api.models import UserProfile
|
||||
from routes.models import Route, City, Country, Leads
|
||||
from sitemanagement.models import Pricing, RoutePromotionLog
|
||||
from sitemanagement.models import Pricing, RoutePromotionLog, Transactions
|
||||
|
||||
from api.utils.decorators import handle_exceptions
|
||||
from api.utils.emailSender import send_email
|
||||
from api.utils.permissionChecker import check_monthly_limit
|
||||
|
||||
|
||||
class UserDataView(ViewSet):
|
||||
"""Эндпоинт для наполнения стора фронта данными"""
|
||||
permission_classes = [IsAuthenticated]
|
||||
@@ -175,20 +176,41 @@ class CountryView(ViewSet):
|
||||
|
||||
class ChangeUserMembership(ViewSet):
|
||||
"""Меняем тарифный план пользователя"""
|
||||
|
||||
@action(detail=False, methods=['post'])
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
@action(detail=False, methods=['patch'])
|
||||
@handle_exceptions
|
||||
def change_plan(self, request):
|
||||
"""Меняем пользователю тарифный план"""
|
||||
user = request.user
|
||||
user_profile = get_object_or_404(UserProfile, user=user)
|
||||
|
||||
# преобразуем plan в account_type если нужно
|
||||
if 'plan' in request.data and 'account_type' not in request.data:
|
||||
request.data['account_type'] = request.data['plan']
|
||||
|
||||
serializer = PlanChangeSerializer(user_profile, data=request.data)
|
||||
|
||||
if serializer.is_valid():
|
||||
serializer.save()
|
||||
return Response({"message": "Тариф успешно изменен"}, status=status.HTTP_200_OK)
|
||||
|
||||
# получаем объект тарифного плана
|
||||
new_plan = get_object_or_404(Pricing, plan=serializer.validated_data['account_type'])
|
||||
|
||||
# создаем транзакцию
|
||||
transaction = Transactions.objects.create(
|
||||
user=user,
|
||||
plan=new_plan,
|
||||
amount=new_plan.price,
|
||||
status='success'
|
||||
)
|
||||
|
||||
# если транзакция успешно создана, меняем тариф
|
||||
if transaction:
|
||||
serializer.save()
|
||||
return Response({
|
||||
"message": "Тариф успешно изменен",
|
||||
"account_type": serializer.validated_data['account_type']
|
||||
}, status=status.HTTP_200_OK)
|
||||
|
||||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
class GetMembershipData(ViewSet):
|
||||
|
||||
Reference in New Issue
Block a user