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: