From 563db1c7e6cd432995ffd050dfabdd6d1fca8ae5 Mon Sep 17 00:00:00 2001 From: MoonTestUse1 Date: Sun, 5 Jan 2025 02:54:36 +0600 Subject: [PATCH] add websockets suppor96 --- backend/.env | 8 ++++++-- backend/app/config.py | 28 +++++++++++++++++----------- backend/app/database.py | 9 ++++++++- backend/app/main.py | 6 ++++-- 4 files changed, 35 insertions(+), 16 deletions(-) diff --git a/backend/.env b/backend/.env index f4b37e3..7b05200 100644 --- a/backend/.env +++ b/backend/.env @@ -5,9 +5,13 @@ POSTGRES_DB=support POSTGRES_HOST=support-db POSTGRES_PORT=5432 +# Redis settings +REDIS_HOST=support-redis +REDIS_PORT=6379 + # JWT settings -JWT_SECRET=your-secret-key -JWT_ALGORITHM=HS256 +SECRET_KEY=your-secret-key-here +ALGORITHM=HS256 ACCESS_TOKEN_EXPIRE_MINUTES=1440 # 24 hours # Telegram settings (optional) diff --git a/backend/app/config.py b/backend/app/config.py index 0c9c802..c41873d 100644 --- a/backend/app/config.py +++ b/backend/app/config.py @@ -6,26 +6,32 @@ from typing import Optional class Settings(BaseSettings): """Application settings""" # Database settings - POSTGRES_USER: str - POSTGRES_PASSWORD: str - POSTGRES_DB: str - POSTGRES_HOST: str - POSTGRES_PORT: str + POSTGRES_USER: str = "postgres" + POSTGRES_PASSWORD: str = "postgres" + POSTGRES_DB: str = "support" + POSTGRES_HOST: str = "support-db" + POSTGRES_PORT: str = "5432" + DATABASE_URL: str = None # Будет установлено в __init__ - @property - def DATABASE_URL(self) -> str: - """Get database URL""" - return f"postgresql://{self.POSTGRES_USER}:{self.POSTGRES_PASSWORD}@{self.POSTGRES_HOST}:{self.POSTGRES_PORT}/{self.POSTGRES_DB}" + # Redis settings + REDIS_HOST: str = "support-redis" + REDIS_PORT: int = 6379 # JWT settings - JWT_SECRET: str - JWT_ALGORITHM: str = "HS256" + SECRET_KEY: str = "your-secret-key" # В продакшене нужно заменить на безопасный ключ + ALGORITHM: str = "HS256" ACCESS_TOKEN_EXPIRE_MINUTES: int = 60 * 24 # 24 hours # Telegram settings TELEGRAM_BOT_TOKEN: Optional[str] = None TELEGRAM_CHAT_ID: Optional[str] = None + def __init__(self, **kwargs): + super().__init__(**kwargs) + # Формируем URL для подключения к базе данных + if not self.DATABASE_URL: + self.DATABASE_URL = f"postgresql://{self.POSTGRES_USER}:{self.POSTGRES_PASSWORD}@{self.POSTGRES_HOST}:{self.POSTGRES_PORT}/{self.POSTGRES_DB}" + class Config: """Pydantic config""" env_file = ".env" diff --git a/backend/app/database.py b/backend/app/database.py index 7600f7f..1570fe3 100644 --- a/backend/app/database.py +++ b/backend/app/database.py @@ -3,15 +3,22 @@ from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker from .db.base_class import Base from .config import settings +import logging + +# Настраиваем логирование +logger = logging.getLogger(__name__) # Создаем URL для подключения к базе данных SQLALCHEMY_DATABASE_URL = settings.DATABASE_URL +logger.info(f"Database URL: {SQLALCHEMY_DATABASE_URL}") # Создаем движок SQLAlchemy с логированием SQL-запросов engine = create_engine( SQLALCHEMY_DATABASE_URL, echo=True, # Включаем логирование SQL-запросов - pool_pre_ping=True # Проверяем соединение перед использованием + pool_pre_ping=True, # Проверяем соединение перед использованием + pool_size=5, # Размер пула соединений + max_overflow=10 # Максимальное количество дополнительных соединений ) # Создаем фабрику сессий diff --git a/backend/app/main.py b/backend/app/main.py index bf73a87..87cb2fb 100644 --- a/backend/app/main.py +++ b/backend/app/main.py @@ -4,7 +4,7 @@ from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from .db.base import Base from .database import engine -from .routers import auth, requests, employees +from .routers import auth, requests, employees, admin, statistics from .websockets.notifications import notification_manager # Настраиваем логирование @@ -30,9 +30,11 @@ app.add_middleware( ) # Подключаем роутеры -app.include_router(auth.router, prefix="/api", tags=["auth"]) +app.include_router(auth.router, prefix="/api/auth", tags=["auth"]) app.include_router(requests.router, prefix="/api/requests", tags=["requests"]) app.include_router(employees.router, prefix="/api/employees", tags=["employees"]) +app.include_router(admin.router, prefix="/api/admin", tags=["admin"]) +app.include_router(statistics.router, prefix="/api/statistics", tags=["statistics"]) # Добавляем WebSocket маршруты app.websocket("/api/ws/admin")(notification_manager.admin_endpoint)