fix(servarr): restore sync subscription lookup (#6635)

This commit is contained in:
jxxghp
2026-09-10 09:29:17 +08:00
parent 02686ed674
commit fcc83e6bbe
2 changed files with 41 additions and 0 deletions

View File

@@ -600,6 +600,16 @@ class SessionSubscriptionRepository:
"""同步按可选状态读取订阅快照。"""
return [_project_subscription(record) for record in self._sync_repository().list(state)]
def list_by_media_identity(
self,
media_source: MediaSource,
media_id: str,
music_type: Optional[str] = None,
) -> builtins.list[SubscriptionSnapshot]:
"""同步按规范媒体身份读取订阅快照。"""
records = self._sync_repository().list_by_media_identity(media_source, media_id, music_type)
return [_project_subscription(record) for record in records]
async def async_get(self, subscribe_id: int) -> Optional[SubscriptionSnapshot]:
"""异步按主键读取订阅快照。"""
record = await self._async_repository().async_get(subscribe_id)

View File

@@ -7,6 +7,7 @@ from sqlalchemy import func, select
from sqlalchemy.ext.asyncio import AsyncSession
from app.api.context import get_sync_subscription_repository
from app.application.servarr import ServarrSubscriptionService
from app.application.subscription.complete import CompleteSubscriptionCommand
from app.application.subscription.contract import (
SubscriptionIdentity,
@@ -84,6 +85,36 @@ def test_sync_api_repository_dependency_binds_sync_session(db) -> None:
assert repository.get(-1) is None
def test_servarr_sync_lookup_reads_session_repository(db) -> None:
"""Servarr 同步 lookup 应从请求级订阅仓储读取媒体身份投影。"""
row = db.add(
Subscribe(
name="同步 lookup 订阅",
type=MediaType.MOVIE.value,
media_source=MediaSource.TMDB.value,
media_id="550",
)
)
db.add(
Subscribe(
name="其他媒体",
type=MediaType.MOVIE.value,
media_source=MediaSource.TMDB.value,
media_id="551",
)
)
repository = SessionSubscriptionRepository(db.session)
service = ServarrSubscriptionService(
async_repository=repository,
sync_repository=repository,
)
result = service.list_by_media_identity_sync(MediaSource.TMDB, "550")
assert [(item.id, item.name, item.media_id) for item in result] == [(row.id, "同步 lookup 订阅", "550")]
def test_session_repository_leaves_commit_and_rollback_to_caller(db) -> None:
"""请求级仓储只 flush 暂存记录,调用方回滚后数据库不保留该记录。"""
db.watermark(Subscribe)