From cda77a47c4fc01f053c4fc84479fd31780058293 Mon Sep 17 00:00:00 2001 From: MoonTestUse1 Date: Fri, 3 Jan 2025 01:21:28 +0600 Subject: [PATCH] =?UTF-8?q?=D0=BE=D1=82=D0=BF=D1=80=D0=B0=D0=B2=D0=BA?= =?UTF-8?q?=D0=B0=20=D1=83=D0=B2=D0=B5=D0=B4=D0=BE=D0=BC=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B9=20=D0=B2=20=D1=82=D0=B5=D0=BB=D0=B5=D0=B3=D1=80?= =?UTF-8?q?=D0=B0=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/.env | 4 ++-- backend/app/routers/requests.py | 15 ++++++++++----- backend/app/utils/telegram.py | 31 ++++++++++++++++++++++++++++++- 3 files changed, 42 insertions(+), 8 deletions(-) diff --git a/backend/.env b/backend/.env index 3197161..3a593ac 100644 --- a/backend/.env +++ b/backend/.env @@ -1,3 +1,3 @@ +DATABASE_URL=postgresql://postgres:postgres123@postgres/support_db TELEGRAM_BOT_TOKEN=7677506032:AAHduD5EePz3bE23DKlo35KoOp2_9lZuS34 -TELEGRAM_CHAT_ID=5057752127 -DATABASE_URL=postgresql://postgres:postgres123@postgres/support_db \ No newline at end of file +TELEGRAM_CHAT_ID=5057752127 \ No newline at end of file diff --git a/backend/app/routers/requests.py b/backend/app/routers/requests.py index 03556b0..5432715 100644 --- a/backend/app/routers/requests.py +++ b/backend/app/routers/requests.py @@ -7,6 +7,8 @@ from ..models.request import Request, RequestStatus, RequestPriority from ..schemas.request import RequestCreate, RequestResponse, RequestUpdate, RequestStatistics from ..utils.auth import get_current_admin, get_current_employee from sqlalchemy import func +from ..models.employee import Employee +from ..utils.telegram import notify_new_request router = APIRouter() @@ -39,7 +41,7 @@ def get_requests( def create_request( request: RequestCreate, db: Session = Depends(get_db), - current_employee: dict = Depends(get_current_employee) + current_employee: Employee = Depends(get_current_employee) ): """Create new request""" try: @@ -47,14 +49,17 @@ def create_request( title=request.title, description=request.description, priority=request.priority, - status=RequestStatus.NEW.value, - employee_id=current_employee["id"] + status=RequestStatus.NEW, + employee_id=current_employee.id ) db.add(db_request) db.commit() db.refresh(db_request) + # Отправляем уведомление в Telegram + notify_new_request(db_request.id) + return request_to_dict(db_request) except Exception as e: db.rollback() @@ -63,12 +68,12 @@ def create_request( @router.get("/my", response_model=List[RequestResponse]) def get_employee_requests( db: Session = Depends(get_db), - current_employee: dict = Depends(get_current_employee) + current_employee: Employee = Depends(get_current_employee) ): """Get employee's requests""" try: requests = db.query(Request).filter( - Request.employee_id == current_employee["id"] + Request.employee_id == current_employee.id ).all() # Преобразуем объекты в словари до закрытия сессии diff --git a/backend/app/utils/telegram.py b/backend/app/utils/telegram.py index 2084106..9909d49 100644 --- a/backend/app/utils/telegram.py +++ b/backend/app/utils/telegram.py @@ -3,11 +3,12 @@ import os from fastapi import APIRouter, Request from telebot import TeleBot from telebot.types import Update -from ..models.request import RequestStatus +from ..models.request import RequestStatus, RequestPriority from ..database import SessionLocal from ..models.request import Request as DBRequest TELEGRAM_BOT_TOKEN = os.getenv("TELEGRAM_BOT_TOKEN") +TELEGRAM_CHAT_ID = os.getenv("TELEGRAM_CHAT_ID") WEBHOOK_URL = "https://itformhelp.ru/telegram/webhook/" WEBHOOK_PATH = "/telegram/webhook/" @@ -37,6 +38,34 @@ def handle_message(message): """Handle all messages""" bot.reply_to(message, "Я получил ваше сообщение и обязательно обработаю его!") +def format_priority(priority: str) -> str: + """Format priority with emoji""" + priority_emoji = { + RequestPriority.LOW: "🟢", + RequestPriority.MEDIUM: "🟡", + RequestPriority.HIGH: "🔴" + } + return f"{priority_emoji.get(priority, '⚪')} {priority.capitalize()}" + +def notify_new_request(request_id: int): + """Send notification about new request""" + try: + db = SessionLocal() + request = db.query(DBRequest).filter(DBRequest.id == request_id).first() + if request: + message = ( + f"📋 Новая заявка #{request.id}\n\n" + f"📝 Заголовок: {request.title}\n" + f"👤 Сотрудник: {request.employee.last_name} {request.employee.first_name}\n" + f"❗ Приоритет: {format_priority(request.priority)}\n\n" + f"📄 Описание:\n{request.description}" + ) + bot.send_message(TELEGRAM_CHAT_ID, message, parse_mode="HTML") + except Exception as e: + print(f"Error sending telegram notification: {e}") + finally: + db.close() + def notify_status_change(request_id: int, new_status: RequestStatus): """Notify user about request status change""" try: