"""企业信息(单租户)""" from typing import Optional import asyncpg from core.config import settings class EnterpriseService: @staticmethod async def get_by_id(conn: asyncpg.Connection, enterprise_id: int) -> Optional[dict]: row = await conn.fetchrow( """ SELECT id, name, code, ai_display_name, created_at, updated_at FROM enterprise WHERE id = $1 """, enterprise_id, ) return dict(row) if row else None @staticmethod async def resolve_ai_display_name(enterprise_id: Optional[int]) -> str: """终端用户会话用的展示名:按企业配置,否则用全局默认。""" from core.database import get_db_pool fallback = settings.ai_display_name_default if enterprise_id is None: return fallback pool = await get_db_pool() async with pool.acquire() as conn: row = await conn.fetchrow( "SELECT ai_display_name FROM enterprise WHERE id = $1", enterprise_id, ) if not row or row["ai_display_name"] is None: return fallback name = str(row["ai_display_name"]).strip() return name if name else fallback @staticmethod async def update_profile( conn: asyncpg.Connection, enterprise_id: int, *, name: str, ai_display_name: str, ) -> Optional[dict]: row = await conn.fetchrow( """ UPDATE enterprise SET name = $2, ai_display_name = $3, updated_at = CURRENT_TIMESTAMP WHERE id = $1 RETURNING id, name, code, ai_display_name, created_at, updated_at """, enterprise_id, name, ai_display_name.strip(), ) return dict(row) if row else None