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

Fix database

This commit is contained in:
MoonTestUse1
2025-01-07 06:29:20 +06:00
parent 117f5af0cb
commit 362290a332
3 changed files with 36 additions and 47 deletions

View File

@@ -1,22 +1,25 @@
"""Database configuration"""
"""Database module"""
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, declarative_base
from .core.config import settings
# Создаем базовый класс для моделей
Base = declarative_base()
# Создаем движок базы данных
engine = create_engine(settings.get_database_url())
engine = create_engine(
settings.get_database_url(),
pool_pre_ping=True,
pool_size=5,
max_overflow=10
)
# Создаем фабрику сессий
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
# Создаем базовый класс для моделей
Base = declarative_base()
def get_db():
"""Get database session"""
db = SessionLocal()
try:
yield db
finally:
db.close()
def init_db():
"""Initialize database"""
# Импортируем модели здесь, чтобы избежать циклических зависимостей
from .db.base import Base # noqa: F811
Base.metadata.create_all(bind=engine)

View File

@@ -1,24 +1,18 @@
"""Main application module"""
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
import logging
from .core.config import settings
from .routers import auth, employees, requests, admin
from .database import engine, Base
from .db.init_db import init_db
from .database import get_db
from .db.base import Base
from .database import engine
# Настройка логирования
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
app = FastAPI(
title=settings.PROJECT_NAME,
openapi_url=f"{settings.API_V1_STR}/openapi.json"
)
# Создаем таблицы
Base.metadata.create_all(bind=engine)
# Создаем приложение
app = FastAPI(title="Employee Request System API")
# Настраиваем CORS
# Настройка CORS
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
@@ -28,17 +22,7 @@ app.add_middleware(
)
# Подключаем роутеры
app.include_router(auth.router, prefix="/api/auth", tags=["auth"])
app.include_router(employees.router, prefix="/api/employees", tags=["employees"])
app.include_router(requests.router, prefix="/api/requests", tags=["requests"])
app.include_router(admin.router, prefix="/api/admin", tags=["admin"])
# Инициализируем базу данных
@app.on_event("startup")
async def startup_event():
"""Initialize database on startup"""
db = next(get_db())
try:
init_db(db)
finally:
db.close()
app.include_router(auth.router, prefix=settings.API_V1_STR, tags=["auth"])
app.include_router(employees.router, prefix=settings.API_V1_STR, tags=["employees"])
app.include_router(requests.router, prefix=settings.API_V1_STR, tags=["requests"])
app.include_router(admin.router, prefix=settings.API_V1_STR, tags=["admin"])

View File

@@ -8,14 +8,16 @@ from sqlalchemy.pool import StaticPool
from app.core.test_config import test_settings
from app.db.base_class import Base
from app.models.employee import Employee
from app.models.request import Request
from app.models.token import Token
from app.main import app
from app.dependencies import get_db
from app.utils.security import get_password_hash
from app.utils.jwt import create_and_save_token
# Импортируем модели после Base, чтобы избежать циклических зависимостей
from app.models.employee import Employee
from app.models.request import Request
from app.models.token import Token
# Mock Telegram notifications
@pytest.fixture(autouse=True)
def mock_telegram_bot(mocker):
@@ -33,16 +35,16 @@ def mock_telegram_notify(mocker):
def engine():
"""Create test database engine"""
database_url = test_settings.get_database_url()
engine = create_engine(
test_engine = create_engine(
database_url,
pool_pre_ping=True,
pool_size=5,
max_overflow=10
)
# Создаем все таблицы перед тестами
Base.metadata.drop_all(bind=engine)
Base.metadata.create_all(bind=engine)
return engine
Base.metadata.drop_all(bind=test_engine)
Base.metadata.create_all(bind=test_engine)
return test_engine
@pytest.fixture(scope="function")
def db_session(engine):