mirror of
https://gitlab.com/MoonTestUse1/AdministrationItDepartmens.git
synced 2025-08-14 00:25:46 +02:00
Fix database
This commit is contained in:
@@ -1,22 +1,25 @@
|
|||||||
"""Database configuration"""
|
"""Database module"""
|
||||||
from sqlalchemy import create_engine
|
from sqlalchemy import create_engine
|
||||||
from sqlalchemy.orm import sessionmaker, declarative_base
|
from sqlalchemy.orm import sessionmaker, declarative_base
|
||||||
|
|
||||||
from .core.config import settings
|
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)
|
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
|
||||||
|
|
||||||
# Создаем базовый класс для моделей
|
def init_db():
|
||||||
Base = declarative_base()
|
"""Initialize database"""
|
||||||
|
# Импортируем модели здесь, чтобы избежать циклических зависимостей
|
||||||
def get_db():
|
from .db.base import Base # noqa: F811
|
||||||
"""Get database session"""
|
Base.metadata.create_all(bind=engine)
|
||||||
db = SessionLocal()
|
|
||||||
try:
|
|
||||||
yield db
|
|
||||||
finally:
|
|
||||||
db.close()
|
|
||||||
@@ -1,24 +1,18 @@
|
|||||||
"""Main application module"""
|
"""Main application module"""
|
||||||
from fastapi import FastAPI
|
from fastapi import FastAPI
|
||||||
from fastapi.middleware.cors import CORSMiddleware
|
from fastapi.middleware.cors import CORSMiddleware
|
||||||
import logging
|
|
||||||
|
|
||||||
|
from .core.config import settings
|
||||||
from .routers import auth, employees, requests, admin
|
from .routers import auth, employees, requests, admin
|
||||||
from .database import engine, Base
|
from .db.base import Base
|
||||||
from .db.init_db import init_db
|
from .database import engine
|
||||||
from .database import get_db
|
|
||||||
|
|
||||||
# Настройка логирования
|
app = FastAPI(
|
||||||
logging.basicConfig(level=logging.INFO)
|
title=settings.PROJECT_NAME,
|
||||||
logger = logging.getLogger(__name__)
|
openapi_url=f"{settings.API_V1_STR}/openapi.json"
|
||||||
|
)
|
||||||
|
|
||||||
# Создаем таблицы
|
# Настройка CORS
|
||||||
Base.metadata.create_all(bind=engine)
|
|
||||||
|
|
||||||
# Создаем приложение
|
|
||||||
app = FastAPI(title="Employee Request System API")
|
|
||||||
|
|
||||||
# Настраиваем CORS
|
|
||||||
app.add_middleware(
|
app.add_middleware(
|
||||||
CORSMiddleware,
|
CORSMiddleware,
|
||||||
allow_origins=["*"],
|
allow_origins=["*"],
|
||||||
@@ -28,17 +22,7 @@ app.add_middleware(
|
|||||||
)
|
)
|
||||||
|
|
||||||
# Подключаем роутеры
|
# Подключаем роутеры
|
||||||
app.include_router(auth.router, prefix="/api/auth", tags=["auth"])
|
app.include_router(auth.router, prefix=settings.API_V1_STR, tags=["auth"])
|
||||||
app.include_router(employees.router, prefix="/api/employees", tags=["employees"])
|
app.include_router(employees.router, prefix=settings.API_V1_STR, tags=["employees"])
|
||||||
app.include_router(requests.router, prefix="/api/requests", tags=["requests"])
|
app.include_router(requests.router, prefix=settings.API_V1_STR, tags=["requests"])
|
||||||
app.include_router(admin.router, prefix="/api/admin", tags=["admin"])
|
app.include_router(admin.router, prefix=settings.API_V1_STR, 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()
|
|
||||||
@@ -8,14 +8,16 @@ from sqlalchemy.pool import StaticPool
|
|||||||
|
|
||||||
from app.core.test_config import test_settings
|
from app.core.test_config import test_settings
|
||||||
from app.db.base_class import Base
|
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.main import app
|
||||||
from app.dependencies import get_db
|
from app.dependencies import get_db
|
||||||
from app.utils.security import get_password_hash
|
from app.utils.security import get_password_hash
|
||||||
from app.utils.jwt import create_and_save_token
|
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
|
# Mock Telegram notifications
|
||||||
@pytest.fixture(autouse=True)
|
@pytest.fixture(autouse=True)
|
||||||
def mock_telegram_bot(mocker):
|
def mock_telegram_bot(mocker):
|
||||||
@@ -33,16 +35,16 @@ def mock_telegram_notify(mocker):
|
|||||||
def engine():
|
def engine():
|
||||||
"""Create test database engine"""
|
"""Create test database engine"""
|
||||||
database_url = test_settings.get_database_url()
|
database_url = test_settings.get_database_url()
|
||||||
engine = create_engine(
|
test_engine = create_engine(
|
||||||
database_url,
|
database_url,
|
||||||
pool_pre_ping=True,
|
pool_pre_ping=True,
|
||||||
pool_size=5,
|
pool_size=5,
|
||||||
max_overflow=10
|
max_overflow=10
|
||||||
)
|
)
|
||||||
# Создаем все таблицы перед тестами
|
# Создаем все таблицы перед тестами
|
||||||
Base.metadata.drop_all(bind=engine)
|
Base.metadata.drop_all(bind=test_engine)
|
||||||
Base.metadata.create_all(bind=engine)
|
Base.metadata.create_all(bind=test_engine)
|
||||||
return engine
|
return test_engine
|
||||||
|
|
||||||
@pytest.fixture(scope="function")
|
@pytest.fixture(scope="function")
|
||||||
def db_session(engine):
|
def db_session(engine):
|
||||||
|
|||||||
Reference in New Issue
Block a user