1
0
mirror of https://gitlab.com/MoonTestUse1/AdministrationItDepartmens.git synced 2025-08-14 00:25:46 +02:00

add websockets suppor96

This commit is contained in:
MoonTestUse1
2025-01-05 02:54:36 +06:00
parent 1b1d7c57d5
commit 563db1c7e6
4 changed files with 35 additions and 16 deletions

View File

@@ -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)

View File

@@ -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"

View File

@@ -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 # Максимальное количество дополнительных соединений
)
# Создаем фабрику сессий

View File

@@ -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)