from app.core.database import DatabaseManager from ._const import I2IRecommendDataSyncConst class I2IRecommendDataSyncMapper(I2IRecommendDataSyncConst): def __init__(self, pool: DatabaseManager): self.pool = pool async def fetch_all_accounts(self): """查询有待激活数据的账号""" query = """ SELECT gh_id FROM i2i_recommend WHERE status = %s GROUP BY gh_id; """ return await self.pool.async_fetch( query=query, params=(self.VersionStatus.INIT,), ) async def fetch_max_version_for_account(self, gh_id: str): """ 查询单个账号的最大version及其status 返回: {max_version, status} or None """ query = """ SELECT version AS max_version, status FROM i2i_recommend WHERE gh_id = %s ORDER BY version DESC LIMIT 1; """ rows = await self.pool.async_fetch(query=query, params=(gh_id,)) return rows[0] if rows else None async def activate_new_version(self, gh_id: str, version: str): """将该账号最新version的数据 status 0 -> 1""" query = """ UPDATE i2i_recommend SET status = %s WHERE gh_id = %s AND version = %s AND status = %s; """ return await self.pool.async_save( query=query, params=( self.VersionStatus.ONLINE, gh_id, version, self.VersionStatus.INIT, ), ) async def deactivate_old_versions(self, gh_id: str, latest_version: str): """将该账号旧version的数据 status 1 -> 2(归档)""" query = """ UPDATE i2i_recommend SET status = %s WHERE gh_id = %s AND version != %s AND status = %s; """ return await self.pool.async_save( query=query, params=( self.VersionStatus.ARCHIVED, gh_id, latest_version, self.VersionStatus.ONLINE, ), ) __all__ = ["I2IRecommendDataSyncMapper"]