refactor(db): optimize download history query logic

- 使用`TransferHistory.list_by`相同逻辑
This commit is contained in:
Attente
2025-04-19 20:22:37 +08:00
parent 3eefbf97b1
commit a8a70cac08
2 changed files with 38 additions and 28 deletions
+1
View File
@@ -113,6 +113,7 @@ class DownloadHistoryOper(DbOper):
season: Optional[str] = None, episode: Optional[str] = None, tmdbid=None) -> List[DownloadHistory]: season: Optional[str] = None, episode: Optional[str] = None, tmdbid=None) -> List[DownloadHistory]:
""" """
按类型、标题、年份、季集查询下载记录 按类型、标题、年份、季集查询下载记录
tmdbid + mtype 或 title + year
""" """
return DownloadHistory.get_last_by(db=self._db, return DownloadHistory.get_last_by(db=self._db,
mtype=mtype, mtype=mtype,
+37 -28
View File
@@ -85,45 +85,54 @@ class DownloadHistory(Base):
year: Optional[str] = None, season: Optional[str] = None, year: Optional[str] = None, season: Optional[str] = None,
episode: Optional[str] = None, tmdbid: Optional[int] = None): episode: Optional[str] = None, tmdbid: Optional[int] = None):
""" """
据tmdbid、season、season_episode查询转移记录 据tmdbid、season、season_episode查询下载记录
tmdbid + mtype 或 title + year
""" """
result = None result = None
if tmdbid and not season and not episode: # TMDBID + 类型
result = db.query(DownloadHistory).filter(DownloadHistory.tmdbid == tmdbid).order_by( if tmdbid and mtype:
# 电视剧某季某集
if season and episode:
result = db.query(DownloadHistory).filter(DownloadHistory.tmdbid == tmdbid,
DownloadHistory.type == mtype,
DownloadHistory.seasons == season,
DownloadHistory.episodes == episode).order_by(
DownloadHistory.id.desc()).all() DownloadHistory.id.desc()).all()
if tmdbid and season and not episode: # 电视剧某季
result = db.query(DownloadHistory).filter(DownloadHistory.tmdbid == tmdbid, elif season:
DownloadHistory.seasons == season).order_by( result = db.query(DownloadHistory).filter(DownloadHistory.tmdbid == tmdbid,
DownloadHistory.type == mtype,
DownloadHistory.seasons == season).order_by(
DownloadHistory.id.desc()).all() DownloadHistory.id.desc()).all()
if tmdbid and season and episode: else:
result = db.query(DownloadHistory).filter(DownloadHistory.tmdbid == tmdbid, # 电视剧所有季集/电影
DownloadHistory.seasons == season, result = db.query(DownloadHistory).filter(DownloadHistory.tmdbid == tmdbid,
DownloadHistory.episodes == episode).order_by( DownloadHistory.type == mtype).order_by(
DownloadHistory.id.desc()).all() DownloadHistory.id.desc()).all()
# 电视剧所有季集|电影 # 标题 + 年份
if not season and not episode: elif title and year:
result = db.query(DownloadHistory).filter(DownloadHistory.type == mtype, # 电视剧某季某集
DownloadHistory.title == title, if season and episode:
DownloadHistory.year == year).order_by( result = db.query(DownloadHistory).filter(DownloadHistory.title == title,
DownloadHistory.year == year,
DownloadHistory.seasons == season,
DownloadHistory.episodes == episode).order_by(
DownloadHistory.id.desc()).all() DownloadHistory.id.desc()).all()
# 电视剧某季 # 电视剧某季
if season and not episode: elif season:
result = db.query(DownloadHistory).filter(DownloadHistory.type == mtype, result = db.query(DownloadHistory).filter(DownloadHistory.title == title,
DownloadHistory.title == title, DownloadHistory.year == year,
DownloadHistory.year == year, DownloadHistory.seasons == season).order_by(
DownloadHistory.seasons == season).order_by(
DownloadHistory.id.desc()).all() DownloadHistory.id.desc()).all()
# 电视剧某季某集 else:
if season and episode: # 电视剧所有季集/电影
result = db.query(DownloadHistory).filter(DownloadHistory.type == mtype, result = db.query(DownloadHistory).filter(DownloadHistory.title == title,
DownloadHistory.title == title, DownloadHistory.year == year).order_by(
DownloadHistory.year == year,
DownloadHistory.seasons == season,
DownloadHistory.episodes == episode).order_by(
DownloadHistory.id.desc()).all() DownloadHistory.id.desc()).all()
if result: if result:
return list(result) return list(result)
return []
@staticmethod @staticmethod
@db_query @db_query