refactor: 收口 V3 分层架构与插件兼容边界

This commit is contained in:
jxxghp
2026-08-18 13:22:02 +08:00
parent cca99bd421
commit 8472bcff43
274 changed files with 10730 additions and 6130 deletions
+69
View File
@@ -145,6 +145,21 @@ class SubscribeOper(DbOper):
}
return bool(Subscribe.exists(self._db, **identity_params))
async def async_exists(
self, media_source: MediaSource, media_id: str,
season: Optional[int] = None, episode_group: Optional[str] = None,
music_type: Optional[str] = None,
) -> Optional[Subscribe]:
"""异步按媒体身份、季号及可选剧集组读取命中的订阅。"""
return await Subscribe.async_exists(
self._db,
media_source=media_source,
media_id=media_id,
music_type=music_type,
season=season,
episode_group=episode_group,
)
def get(self, sid: int) -> Optional[Subscribe]:
"""
获取订阅
@@ -157,6 +172,34 @@ class SubscribeOper(DbOper):
"""
return await Subscribe.async_get(self._db, rid=sid)
async def async_list_by_media_identity(
self,
media_source: MediaSource,
media_id: str,
music_type: Optional[str] = None,
) -> List[Subscribe]:
"""异步按规范媒体身份读取订阅。"""
return await Subscribe.async_list_by_media_identity(
self._db,
media_source=media_source,
media_id=media_id,
music_type=music_type,
)
def list_by_media_identity(
self,
media_source: MediaSource,
media_id: str,
music_type: Optional[str] = None,
) -> List[Subscribe]:
"""同步按规范媒体身份读取订阅。"""
return Subscribe.list_by_media_identity(
self._db,
media_source=media_source,
media_id=media_id,
music_type=music_type,
)
async def get_candidate(
self,
subscribe_id: int,
@@ -266,6 +309,32 @@ class SubscribeOper(DbOper):
return await Subscribe.async_get_by_state(self._db, state)
return await Subscribe.async_list(self._db)
async def async_list_by_username(
self,
username: str,
state: Optional[str] = None,
mtype: Optional[str] = None,
) -> List[Subscribe]:
"""异步按用户获取订阅。"""
return await Subscribe.async_list_by_username(
self._db,
username=username,
state=state,
mtype=mtype,
)
async def async_list_by_title(
self,
title: str,
season: Optional[int] = None,
) -> List[Subscribe]:
"""异步按标题获取订阅,供旧查询测试和迁移调用兼容。"""
return await Subscribe.async_list_by_title(
self._db,
title=title,
season=season,
)
def delete(self, sid: int):
"""
删除订阅