85 lines
2.5 KiB
Python
85 lines
2.5 KiB
Python
|
|
# services/pos/app/core/database.py
|
||
|
|
"""
|
||
|
|
POS Integration Service Database Configuration using shared database manager
|
||
|
|
"""
|
||
|
|
|
||
|
|
import structlog
|
||
|
|
from contextlib import asynccontextmanager
|
||
|
|
|
||
|
|
from app.core.config import settings
|
||
|
|
from shared.database.base import DatabaseManager, Base
|
||
|
|
|
||
|
|
logger = structlog.get_logger()
|
||
|
|
|
||
|
|
# Create database manager instance
|
||
|
|
database_manager = DatabaseManager(
|
||
|
|
database_url=settings.DATABASE_URL,
|
||
|
|
service_name="pos-service",
|
||
|
|
pool_size=settings.DB_POOL_SIZE,
|
||
|
|
max_overflow=settings.DB_MAX_OVERFLOW,
|
||
|
|
pool_recycle=settings.DB_POOL_RECYCLE,
|
||
|
|
echo=settings.DB_ECHO
|
||
|
|
)
|
||
|
|
|
||
|
|
|
||
|
|
async def get_db():
|
||
|
|
"""
|
||
|
|
Database dependency for FastAPI - using shared database manager
|
||
|
|
"""
|
||
|
|
async for session in database_manager.get_db():
|
||
|
|
yield session
|
||
|
|
|
||
|
|
|
||
|
|
async def init_db():
|
||
|
|
"""Initialize database tables using shared database manager"""
|
||
|
|
try:
|
||
|
|
logger.info("Initializing POS Integration Service database...")
|
||
|
|
|
||
|
|
# Import all models to ensure they're registered
|
||
|
|
from app.models import pos_config, pos_transaction, pos_webhook, pos_sync # noqa: F401
|
||
|
|
|
||
|
|
# Create all tables using database manager
|
||
|
|
await database_manager.create_tables(Base.metadata)
|
||
|
|
|
||
|
|
logger.info("POS Integration Service database initialized successfully")
|
||
|
|
|
||
|
|
except Exception as e:
|
||
|
|
logger.error("Failed to initialize database", error=str(e))
|
||
|
|
raise
|
||
|
|
|
||
|
|
|
||
|
|
async def close_db():
|
||
|
|
"""Close database connections using shared database manager"""
|
||
|
|
try:
|
||
|
|
await database_manager.close_connections()
|
||
|
|
logger.info("Database connections closed")
|
||
|
|
except Exception as e:
|
||
|
|
logger.error("Error closing database connections", error=str(e))
|
||
|
|
|
||
|
|
|
||
|
|
@asynccontextmanager
|
||
|
|
async def get_db_transaction():
|
||
|
|
"""
|
||
|
|
Context manager for database transactions using shared database manager
|
||
|
|
"""
|
||
|
|
async with database_manager.get_session() as session:
|
||
|
|
try:
|
||
|
|
async with session.begin():
|
||
|
|
yield session
|
||
|
|
except Exception as e:
|
||
|
|
logger.error("Transaction error", error=str(e))
|
||
|
|
raise
|
||
|
|
|
||
|
|
|
||
|
|
@asynccontextmanager
|
||
|
|
async def get_background_session():
|
||
|
|
"""
|
||
|
|
Context manager for background tasks using shared database manager
|
||
|
|
"""
|
||
|
|
async with database_manager.get_background_session() as session:
|
||
|
|
yield session
|
||
|
|
|
||
|
|
|
||
|
|
async def health_check():
|
||
|
|
"""Database health check using shared database manager"""
|
||
|
|
return await database_manager.health_check()
|