huoyan-enterprise/backend/services/enterprise_service.py

63 lines
1.9 KiB
Python

"""企业信息(单租户)"""
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