backend routes
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
# Generated by Django 5.2.1 on 2025-05-29 09:21
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('routes', '0008_city_russian_name_alter_city_name'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='route',
|
||||
name='highlight_end_DT',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='route',
|
||||
name='is_highlighted',
|
||||
field=models.BooleanField(default=False, verbose_name='Выделено'),
|
||||
),
|
||||
]
|
||||
18
backend/routes/migrations/0010_route_highlight_end_dt.py
Normal file
18
backend/routes/migrations/0010_route_highlight_end_dt.py
Normal file
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 5.2.1 on 2025-05-29 09:24
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('routes', '0009_remove_route_highlight_end_dt_route_is_highlighted'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='route',
|
||||
name='highlight_end_DT',
|
||||
field=models.DateTimeField(blank=True, null=True, verbose_name='Выделено до'),
|
||||
),
|
||||
]
|
||||
@@ -1,6 +1,7 @@
|
||||
from django.db import models
|
||||
from django.contrib.auth.models import User
|
||||
from routes.constants.routeChoices import owner_type_choices, type_transport_choices, cargo_type_choices
|
||||
from django.utils import timezone
|
||||
|
||||
class Country(models.Model):
|
||||
id = models.BigAutoField(primary_key=True)
|
||||
@@ -101,10 +102,11 @@ class Route(models.Model):
|
||||
verbose_name=('Дата и время последнего поднятия'),
|
||||
blank=True, null=True
|
||||
)
|
||||
|
||||
is_highlighted = models.BooleanField(default=False, verbose_name=('Выделено'))
|
||||
highlight_end_DT = models.DateTimeField(
|
||||
verbose_name=('Дата и время окончания выделения'),
|
||||
blank=True, null=True
|
||||
verbose_name=('Выделено до'),
|
||||
null=True,
|
||||
blank=True
|
||||
)
|
||||
|
||||
status = models.CharField(
|
||||
@@ -122,6 +124,13 @@ class Route(models.Model):
|
||||
from_city_name = self.from_city.name if self.from_city else 'Не указан'
|
||||
to_city_name = self.to_city.name if self.to_city else 'Не указан'
|
||||
return f"Маршрут #{self.id}: {from_city_name} → {to_city_name}"
|
||||
|
||||
@property
|
||||
def is_currently_highlighted(self):
|
||||
"""Проверяем, выделено ли объявление на текущий момент"""
|
||||
if not self.highlight_end_DT:
|
||||
return False
|
||||
return timezone.now() <= self.highlight_end_DT
|
||||
|
||||
class Meta:
|
||||
verbose_name = (u'Маршрут')
|
||||
|
||||
@@ -1,3 +1,31 @@
|
||||
from django.shortcuts import render
|
||||
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
|
||||
|
||||
# Create your views here.
|
||||
@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
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user