Fix new services implementation 9

This commit is contained in:
Urtzi Alfaro
2025-08-16 08:00:52 +02:00
parent 055ce10c66
commit 9de0f9943c
5 changed files with 37 additions and 83 deletions

View File

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