Fix new services implementation 9
This commit is contained in:
@@ -3,75 +3,18 @@
|
||||
Database configuration and session management for Recipe Service
|
||||
"""
|
||||
|
||||
from sqlalchemy import create_engine
|
||||
from sqlalchemy.orm import sessionmaker, Session
|
||||
from sqlalchemy.pool import StaticPool
|
||||
from contextlib import contextmanager
|
||||
from typing import Generator
|
||||
|
||||
from shared.database.base import DatabaseManager, create_database_manager
|
||||
from .config import settings
|
||||
|
||||
|
||||
# Create database engine
|
||||
engine = create_engine(
|
||||
settings.DATABASE_URL,
|
||||
poolclass=StaticPool,
|
||||
pool_pre_ping=True,
|
||||
pool_recycle=300,
|
||||
echo=settings.DEBUG,
|
||||
# Create database manager using shared async infrastructure
|
||||
db_manager = create_database_manager(
|
||||
database_url=settings.DATABASE_URL,
|
||||
service_name="recipes-service",
|
||||
echo=settings.DEBUG
|
||||
)
|
||||
|
||||
# Create session factory
|
||||
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
|
||||
|
||||
|
||||
def get_db() -> Generator[Session, None, None]:
|
||||
"""
|
||||
Dependency to get database session
|
||||
"""
|
||||
db = SessionLocal()
|
||||
try:
|
||||
yield db
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
|
||||
@contextmanager
|
||||
def get_db_context() -> Generator[Session, None, None]:
|
||||
"""
|
||||
Context manager for database session
|
||||
"""
|
||||
db = SessionLocal()
|
||||
try:
|
||||
yield db
|
||||
db.commit()
|
||||
except Exception:
|
||||
db.rollback()
|
||||
raise
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
|
||||
class DatabaseManager:
|
||||
"""Database management utilities"""
|
||||
|
||||
@staticmethod
|
||||
def create_all_tables():
|
||||
"""Create all database tables"""
|
||||
from shared.database.base import Base
|
||||
Base.metadata.create_all(bind=engine)
|
||||
|
||||
@staticmethod
|
||||
def drop_all_tables():
|
||||
"""Drop all database tables (for testing)"""
|
||||
from shared.database.base import Base
|
||||
Base.metadata.drop_all(bind=engine)
|
||||
|
||||
@staticmethod
|
||||
def get_session() -> Session:
|
||||
"""Get a new database session"""
|
||||
return SessionLocal()
|
||||
|
||||
|
||||
# Database manager instance
|
||||
db_manager = DatabaseManager()
|
||||
# Dependency for FastAPI routes
|
||||
async def get_db():
|
||||
"""FastAPI dependency to get database session"""
|
||||
async for session in db_manager.get_db():
|
||||
yield session
|
||||
@@ -15,6 +15,8 @@ from contextlib import asynccontextmanager
|
||||
from .core.config import settings
|
||||
from .core.database import db_manager
|
||||
from .api import recipes, production, ingredients
|
||||
# Import models to register them with SQLAlchemy metadata
|
||||
from .models import recipes as recipe_models
|
||||
|
||||
|
||||
# Configure logging
|
||||
@@ -33,7 +35,7 @@ async def lifespan(app: FastAPI):
|
||||
|
||||
# Create database tables
|
||||
try:
|
||||
db_manager.create_all_tables()
|
||||
await db_manager.create_tables()
|
||||
logger.info("Database tables created successfully")
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to create database tables: {e}")
|
||||
@@ -97,17 +99,14 @@ async def health_check():
|
||||
"""Health check endpoint"""
|
||||
try:
|
||||
# Test database connection
|
||||
db = db_manager.get_session()
|
||||
try:
|
||||
db.execute("SELECT 1")
|
||||
finally:
|
||||
db.close()
|
||||
health_result = await db_manager.health_check()
|
||||
|
||||
return {
|
||||
"status": "healthy",
|
||||
"service": settings.SERVICE_NAME,
|
||||
"version": settings.SERVICE_VERSION,
|
||||
"environment": settings.ENVIRONMENT
|
||||
"environment": settings.ENVIRONMENT,
|
||||
"database": health_result
|
||||
}
|
||||
except Exception as e:
|
||||
logger.error(f"Health check failed: {e}")
|
||||
|
||||
Reference in New Issue
Block a user