88 lines
2.7 KiB
Python
88 lines
2.7 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).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
|
|
) |