From 97514ba8e9700e44095e5d8216ce076a1139d14c Mon Sep 17 00:00:00 2001 From: MoonTestUse1 Date: Sun, 5 Jan 2025 02:47:03 +0600 Subject: [PATCH] add websockets suppor94 --- backend/app/database.py | 2 +- backend/app/db/base.py | 9 +++--- backend/app/db/base_class.py | 2 +- backend/app/main.py | 55 +++++++++++----------------------- backend/app/models/employee.py | 2 +- backend/app/models/request.py | 2 +- 6 files changed, 26 insertions(+), 46 deletions(-) diff --git a/backend/app/database.py b/backend/app/database.py index 140c197..5f5f5b9 100644 --- a/backend/app/database.py +++ b/backend/app/database.py @@ -1,7 +1,7 @@ """Database session configuration""" from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker -from .db.base import Base +from .db.base_class import Base from .config import settings # Создаем URL для подключения к базе данных diff --git a/backend/app/db/base.py b/backend/app/db/base.py index b2e63ad..7229aed 100644 --- a/backend/app/db/base.py +++ b/backend/app/db/base.py @@ -1,4 +1,5 @@ -"""Database base configuration""" -from sqlalchemy.ext.declarative import declarative_base - -Base = declarative_base() \ No newline at end of file +"""Import all models here for Alembic autogenerate support""" +from app.db.base_class import Base # noqa +from app.models.employee import Employee # noqa +from app.models.request import Request # noqa +from app.models.token import Token # noqa \ No newline at end of file diff --git a/backend/app/db/base_class.py b/backend/app/db/base_class.py index ea230e7..112da8a 100644 --- a/backend/app/db/base_class.py +++ b/backend/app/db/base_class.py @@ -1,4 +1,4 @@ """Base class for SQLAlchemy models""" -from sqlalchemy.orm import declarative_base +from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() \ No newline at end of file diff --git a/backend/app/main.py b/backend/app/main.py index 770d171..5d0438c 100644 --- a/backend/app/main.py +++ b/backend/app/main.py @@ -1,51 +1,30 @@ -"""Main application module""" -from fastapi import FastAPI, Request +"""Main FastAPI application""" +from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware -from . import models -from .routers import admin, employees, requests, auth, statistics -import logging +from .db.base_class import Base +from .database import engine +from .routers import auth, requests, employees +from .websockets.notifications import notification_manager -# Настройка логирования -logging.basicConfig(level=logging.INFO) -logger = logging.getLogger(__name__) +# Создаем таблицы в базе данных +Base.metadata.create_all(bind=engine) -app = FastAPI( - # Включаем автоматическое перенаправление со слэшем - redirect_slashes=True, - # Добавляем описание API - title="Support System API", - description="API для системы поддержки", - version="1.0.0" -) - -# CORS configuration -origins = [ - "http://localhost", - "http://localhost:8080", - "http://localhost:5173", - "http://127.0.0.1:5173", - "http://127.0.0.1:8080", - "http://185.139.70.62", # Добавляем ваш production домен -] +app = FastAPI(title="Support API") +# Настраиваем CORS app.add_middleware( CORSMiddleware, - allow_origins=origins, + allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], - expose_headers=["*"] ) -# Include routers -app.include_router(auth.router, prefix="/api/auth", tags=["auth"]) -app.include_router(employees.router, prefix="/api/employees", tags=["employees"]) +# Подключаем роутеры +app.include_router(auth.router, prefix="/api", tags=["auth"]) app.include_router(requests.router, prefix="/api/requests", tags=["requests"]) -app.include_router(admin.router, prefix="/api/admin", tags=["admin"]) -app.include_router(statistics.router, prefix="/api/statistics", tags=["statistics"]) +app.include_router(employees.router, prefix="/api/employees", tags=["employees"]) -@app.middleware("http") -async def log_requests(request: Request, call_next): - logger.info(f"Request: {request.method} {request.url}") - response = await call_next(request) - return response \ No newline at end of file +# Добавляем WebSocket маршруты +app.websocket("/api/ws/admin")(notification_manager.admin_endpoint) +app.websocket("/api/ws/employee/{employee_id}")(notification_manager.employee_endpoint) \ No newline at end of file diff --git a/backend/app/models/employee.py b/backend/app/models/employee.py index 1b0291a..51d5b10 100644 --- a/backend/app/models/employee.py +++ b/backend/app/models/employee.py @@ -1,7 +1,7 @@ """Employee models""" from sqlalchemy import Column, Integer, String from sqlalchemy.orm import relationship -from ..db.base import Base +from ..db.base_class import Base class Employee(Base): diff --git a/backend/app/models/request.py b/backend/app/models/request.py index 5bed0e0..ea72d68 100644 --- a/backend/app/models/request.py +++ b/backend/app/models/request.py @@ -3,7 +3,7 @@ from enum import Enum from sqlalchemy import Column, Integer, String, ForeignKey, DateTime, Enum as SQLAlchemyEnum from sqlalchemy.sql import func from sqlalchemy.orm import relationship -from ..db.base import Base +from ..db.base_class import Base class RequestStatus(str, Enum):