Files
tripwithbonus/backend/api/main/views.py
2025-05-26 10:33:09 +03:00

91 lines
2.8 KiB
Python

import requests
from django.conf import settings
from rest_framework import status
from rest_framework.views import APIView
from rest_framework.response import Response
from api.utils.decorators import handle_exceptions
from routes.models import Route
from routes.constants.routeChoices import owner_type_choices
from api.main.serializers import FAQMainSerializer, NewsMainSerializer, TelegramSerializer, HomePageRouteSerializer
from sitemanagement.models import FAQ, News
class FAQView(APIView):
@handle_exceptions
def get(self, request):
faqs = FAQ.objects.all()
data = {
'faqs': FAQMainSerializer(faqs, many=True).data
}
return Response(data, status=status.HTTP_200_OK)
class NewsView(APIView):
@handle_exceptions
def get(self, request):
news = News.objects.all()
data = {
'news': NewsMainSerializer(news, many=True).data
}
return Response(data, status=status.HTTP_200_OK)
class LatestRoutesView(APIView):
@handle_exceptions
def get(self, request):
"""Получаем последние актуальные маршруты"""
routes = []
owner_types = dict(owner_type_choices).keys()
for owner_type in owner_types:
routes.extend(
HomePageRouteSerializer(
Route.objects.filter(
owner_type=owner_type,
status="actual"
).order_by('-id')[:5],
many=True
).data
)
return Response(routes, status=status.HTTP_200_OK)
class TelegramMessageView(APIView):
@handle_exceptions
def post(self, request):
serializer = TelegramSerializer(data=request.data)
if not serializer.is_valid():
return Response(
{"error": "Invalid data provided", "details": serializer.errors},
status=status.HTTP_400_BAD_REQUEST
)
# формируем сообщение из полей
message_obj = serializer.save()
message = (
f"#{message_obj.source}\n"
f"Name: {message_obj.name}\n"
f"Phone number: {message_obj.phone_number}\n"
f"Message: {message_obj.message}"
)
response = requests.post(
f'https://api.telegram.org/bot{settings.BOT_TOKEN}/sendMessage',
json={
'chat_id': settings.CHAT_ID,
'text': message,
}
)
response.raise_for_status()
return Response(
{"success": "Message sent successfully"},
status=status.HTTP_201_CREATED
)