from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession, async_sessionmaker from sqlalchemy.orm import DeclarativeBase from sqlalchemy import Column, String, Integer, DateTime, Text, JSON from datetime import datetime from app.config import settings class Base(DeclarativeBase): pass class CallbackLog(Base): __tablename__ = "callback_logs" id = Column(Integer, primary_key=True, autoincrement=True) site_id = Column(String(100), nullable=False, comment="站点ID") # 新增siteId字段 remote_address = Column(String(45), nullable=True, comment="客户端IP地址") server_ip = Column(String(45), nullable=True, comment="服务器IP地址") request_url = Column(String(500), nullable=False) request_headers = Column(JSON, nullable=False) request_body = Column(JSON, nullable=False) created_at = Column(DateTime, default=datetime.utcnow) class ExternalApiLog(Base): __tablename__ = "external_api_logs" # 重命名表,更通用 id = Column(Integer, primary_key=True, autoincrement=True) request_url = Column(String(500), nullable=False) request_headers = Column(JSON, nullable=False) request_body = Column(JSON, nullable=False) response_status = Column(Integer) response_headers = Column(JSON) response_body = Column(Text) retry_count = Column(Integer, default=0) # 重试次数 created_at = Column(DateTime, default=datetime.utcnow) # 创建数据库引擎 engine = create_async_engine( settings.database_url, echo=settings.debug, future=True ) # 创建会话工厂 AsyncSessionLocal = async_sessionmaker( engine, class_=AsyncSession, expire_on_commit=False ) async def get_db(): async with AsyncSessionLocal() as session: try: yield session finally: await session.close() async def init_db(): async with engine.begin() as conn: await conn.run_sync(Base.metadata.create_all)