route handlers for account/main

This commit is contained in:
2025-05-19 16:56:30 +03:00
parent edd380d78a
commit c0da94f3dc
22 changed files with 601 additions and 150 deletions

View File

@@ -2,6 +2,16 @@ from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.contrib.auth.models import User
from .models import UserProfile
from routes.models import Route
class RouteInline(admin.TabularInline):
model = Route
fields = ('owner_type', 'type_transport', 'from_city', 'to_city', 'cargo_type', 'departure_DT', 'arrival_DT')
readonly_fields = ('owner_type', 'type_transport', 'from_city', 'to_city', 'cargo_type', 'departure_DT', 'arrival_DT')
extra = 0
can_delete = False
verbose_name = 'Маршрут пользователя'
verbose_name_plural = 'Маршруты пользователя'
class UserProfileInline(admin.StackedInline):
model = UserProfile
@@ -12,7 +22,7 @@ class UserProfileInline(admin.StackedInline):
readonly_fields = ('uuid','authMailCode') # ридонли в админке
class UserAdmin(BaseUserAdmin):
inlines = (UserProfileInline,)
inlines = (UserProfileInline, RouteInline)
# перерегистрируем User
admin.site.unregister(User)

View File

@@ -10,4 +10,26 @@ class FAQMainSerializer(serializers.ModelSerializer):
class NewsMainSerializer(serializers.ModelSerializer):
class Meta:
model = News
fields= "__all__"
fields= "__all__"
class TelegramSerializer(serializers.Serializer):
"""Отправляем сообщение в телеграм канал компании с полями:
- Источник
- Имя пользователя
- Номер телефона
- Сообщение"""
SOURCE_CHOICES = [
("main", "Main"),
("admin", "Admin"),
("userAccount", "Account"),
("contact-us", "Contact Us")
]
source = serializers.ChoiceField(choices=SOURCE_CHOICES)
name = serializers.CharField(max_length=255)
phone_number = serializers.CharField(max_length=20)
message = serializers.CharField(max_length=1000)
def create(self, validated_data):
return type('TelegramMessage', (), validated_data)

View File

@@ -1,9 +1,11 @@
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 api.main.serializers import FAQMainSerializer, NewsMainSerializer
from api.main.serializers import FAQMainSerializer, NewsMainSerializer, TelegramSerializer
from sitemanagement.models import FAQ, News
class FAQView(APIView):
@@ -27,4 +29,40 @@ class NewsView(APIView):
'news': NewsMainSerializer(news, many=True).data
}
return Response(data, status=status.HTTP_200_OK)
return Response(data, 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
)

View File

@@ -1,6 +1,6 @@
from django.urls import path
from api.main.views import FAQView, NewsView
from api.main.views import FAQView, NewsView, TelegramMessageView
from api.auth.views import (
RegisterViewSet,
@@ -13,6 +13,7 @@ from api.account.client.views import UserDataView
urlpatterns = [
path("v1/faq/", FAQView.as_view(), name='faqMain'),
path("v1/news/", NewsView.as_view(), name="newsmain"),
path("v1/send-message", TelegramMessageView.as_view(), name='send_message'),
path("auth/refresh/", RefreshTokenView.as_view(), name="token-refresh"),
path("register/clients/", RegisterViewSet.as_view({'post': 'register_client'}), name="register-client"),