fix highlight logic

This commit is contained in:
2025-05-29 12:44:59 +03:00
parent 327acdd062
commit 2e820fb041
4 changed files with 23 additions and 36 deletions

View File

@@ -104,7 +104,12 @@ class RouteSerializer(serializers.ModelSerializer):
return transport_types.get(obj.type_transport, obj.type_transport) return transport_types.get(obj.type_transport, obj.type_transport)
def get_is_highlighted(self, obj): def get_is_highlighted(self, obj):
return obj.is_currently_highlighted now = timezone.now()
if obj.highlight_end_DT and obj.is_highlighted:
result = now <= obj.highlight_end_DT
return result
return False
class CreateRouteSerializer(serializers.ModelSerializer): class CreateRouteSerializer(serializers.ModelSerializer):
country_from = serializers.CharField(write_only=True) country_from = serializers.CharField(write_only=True)

View File

@@ -9,7 +9,8 @@ from django.core.validators import validate_email
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.db import models from django.db import models
from django.db.models import Q from django.db.models import Q
from datetime import datetime from datetime import datetime, timedelta
from django.utils import timezone
from .serializers import RouteSerializer, CreateRouteSerializer, CitySerializer, CountrySerializer, PlanChangeSerializer, PricingSerializer, LeadSerializer, LeadResponseSerializer from .serializers import RouteSerializer, CreateRouteSerializer, CitySerializer, CountrySerializer, PlanChangeSerializer, PricingSerializer, LeadSerializer, LeadResponseSerializer
from api.auth.serializers import UserResponseSerializer from api.auth.serializers import UserResponseSerializer
@@ -321,9 +322,17 @@ class PremiumMembershipActionsView(ViewSet):
"""Выделяем объявление""" """Выделяем объявление"""
route_id = request.data.get('route_id') route_id = request.data.get('route_id')
route = get_object_or_404(Route, id=route_id) route = get_object_or_404(Route, id=route_id)
# подсвечиваем объявление на 24 часа
now = timezone.now()
route.highlight_end_DT = now + timedelta(days=1)
route.is_highlighted = True route.is_highlighted = True
route.save() route.save()
return Response({"message": "Объявление выделено"}, status=status.HTTP_200_OK)
return Response({
"message": "Объявление выделено",
"is_highlighted": route.is_highlighted
}, status=status.HTTP_200_OK)
@action(detail=False, methods=['patch']) @action(detail=False, methods=['patch'])
@handle_exceptions @handle_exceptions

View File

@@ -130,7 +130,11 @@ class Route(models.Model):
"""Проверяем, выделено ли объявление на текущий момент""" """Проверяем, выделено ли объявление на текущий момент"""
if not self.highlight_end_DT: if not self.highlight_end_DT:
return False return False
return timezone.now() <= self.highlight_end_DT
now = timezone.now()
result = now <= self.highlight_end_DT
return result
class Meta: class Meta:
verbose_name = (u'Маршрут') verbose_name = (u'Маршрут')

View File

@@ -1,31 +0,0 @@
from django.utils import timezone
from datetime import timedelta
from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework import status
from .models import Route
@api_view(['PATCH'])
@permission_classes([IsAuthenticated])
def highlight_route(request):
try:
route_id = request.data.get('route_id')
route = Route.objects.get(id=route_id, owner=request.user)
# подсвечиваем объявление на 24 часа
route.highlight_end_DT = timezone.now() + timedelta(days=1)
route.is_highlighted = True
route.save()
return Response({'status': 'success'})
except Route.DoesNotExist:
return Response(
{'error': 'Маршрут не найден или у вас нет прав для его изменения'},
status=status.HTTP_404_NOT_FOUND
)
except Exception as e:
return Response(
{'error': str(e)},
status=status.HTTP_500_INTERNAL_SERVER_ERROR
)