40 lines
1.4 KiB
Python
40 lines
1.4 KiB
Python
from rich.traceback import install
|
|
from sqlmodel import select
|
|
from typing import Optional
|
|
|
|
import hashlib
|
|
|
|
from src.common.logger import get_logger
|
|
from src.common.data_models.person_info_data_model import MaiPersonInfo
|
|
from src.common.database.database_model import PersonInfo
|
|
from src.common.database.database import get_db_session
|
|
|
|
install(extra_lines=3)
|
|
|
|
logger = get_logger("person_utils")
|
|
|
|
|
|
class PersonUtils:
|
|
@staticmethod
|
|
def get_person_info_by_id(person_id: str) -> Optional[MaiPersonInfo]:
|
|
"""根据person_id获取用户信息"""
|
|
try:
|
|
with get_db_session() as session:
|
|
statement = select(PersonInfo).filter_by(person_id=person_id).limit(1)
|
|
if result := session.exec(statement).first():
|
|
return MaiPersonInfo.from_db_instance(result)
|
|
except Exception as e:
|
|
logger.error(f"查询用户信息失败: {str(e)}")
|
|
return None
|
|
|
|
@staticmethod
|
|
def calculate_person_id(platform: str, user_id: str) -> str:
|
|
"""根据平台和用户ID计算person_id"""
|
|
return hashlib.sha256(f"{platform}_{user_id}".encode("utf-8")).hexdigest()
|
|
|
|
@staticmethod
|
|
def get_person_info_by_user_id_and_platform(user_id: str, platform: str) -> Optional[MaiPersonInfo]:
|
|
"""根据user_id和platform获取用户信息"""
|
|
person_id = PersonUtils.calculate_person_id(platform, user_id)
|
|
return PersonUtils.get_person_info_by_id(person_id)
|