backend logic

This commit is contained in:
2025-05-24 14:55:27 +03:00
parent e4fcf0716d
commit b755eda4b5
7 changed files with 160 additions and 31 deletions

View File

@@ -13,9 +13,9 @@ from django.contrib.auth.models import User
from api.auth.serializers import UserResponseSerializer
from api.models import UserProfile
from api.utils.decorators import handle_exceptions
from routes.models import Route, City, Country
from routes.models import Route, City, Country, Leads
from sitemanagement.models import Pricing
from .serializers import RouteSerializer, CreateRouteSerializer, CitySerializer, CountrySerializer, PlanChangeSerializer, PricingSerializer
from .serializers import RouteSerializer, CreateRouteSerializer, CitySerializer, CountrySerializer, PlanChangeSerializer, PricingSerializer, LeadSerializer
class UserDataView(ViewSet):
"""Эндпоинт для наполнения стора фронта данными"""
@@ -193,9 +193,56 @@ class GetMembershipData(ViewSet):
return Response(serializer.data, status=status.HTTP_200_OK)
class LeadViewSet(ViewSet):
"""Собираем лиды"""
"""ViewSet для работы с заявками на перевозку"""
permission_classes = [IsAuthenticated]
@action(detail=False, methods=['post'])
@handle_exceptions
def send_lead(self, request, id):
pass
"""
Создание новой заявки на перевозку
"""
# добавляем текущего пользователя в данные
data = request.data.copy()
data['moving_user'] = request.user.id
# проверяем существование и доступность маршрута
try:
route = Route.objects.get(id=data.get('route'))
if route.owner == request.user:
return Response(
{"error": "Вы не можете откликнуться на собственную заявку"},
status=status.HTTP_400_BAD_REQUEST
)
except Route.DoesNotExist:
return Response(
{"error": "Указанный маршрут не найден"},
status=status.HTTP_404_NOT_FOUND
)
serializer = LeadSerializer(data=data)
if serializer.is_valid():
lead = serializer.save()
# собираем ответ с данными о заявке для фронта
response_data = {
"status": "success",
"message": "Заявка успешно создана",
"data": {
"id": lead.id,
"route_id": lead.route.id,
"moving_price": lead.moving_price,
"moving_date": lead.moving_date,
}
}
return Response(response_data, status=status.HTTP_201_CREATED)
return Response(
{
"status": "error",
"message": "Ошибка валидации данных",
"errors": serializer.errors
},
status=status.HTTP_400_BAD_REQUEST
)