feat(series): TagService.merge repoints series_page.series_tag_id
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -307,6 +307,7 @@ class TagService:
|
|||||||
await self._repoint_fandom_children(
|
await self._repoint_fandom_children(
|
||||||
source_id, target_id, source_kind
|
source_id, target_id, source_kind
|
||||||
)
|
)
|
||||||
|
await self._repoint_series_pages(source_id, target_id)
|
||||||
|
|
||||||
alias_created = False
|
alias_created = False
|
||||||
if keep_as_alias:
|
if keep_as_alias:
|
||||||
@@ -400,6 +401,17 @@ class TagService:
|
|||||||
.values(canonical_tag_id=tgt)
|
.values(canonical_tag_id=tgt)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
async def _repoint_series_pages(self, src: int, tgt: int) -> None:
|
||||||
|
from ..models.series_page import SeriesPage
|
||||||
|
|
||||||
|
# image_id is UNIQUE across series_page and src != tgt, so an
|
||||||
|
# image in src's series cannot already be in tgt's — no collision.
|
||||||
|
await self.session.execute(
|
||||||
|
update(SeriesPage)
|
||||||
|
.where(SeriesPage.series_tag_id == src)
|
||||||
|
.values(series_tag_id=tgt)
|
||||||
|
)
|
||||||
|
|
||||||
async def _repoint_fandom_children(
|
async def _repoint_fandom_children(
|
||||||
self, src: int, tgt: int, src_kind: TagKind
|
self, src: int, tgt: int, src_kind: TagKind
|
||||||
) -> None:
|
) -> None:
|
||||||
|
|||||||
@@ -410,3 +410,20 @@ async def test_alias_create_does_not_clobber_existing(db):
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
assert cid == other.id # pre-existing alias untouched
|
assert cid == other.id # pre-existing alias untouched
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_merge_repoints_series_pages(db):
|
||||||
|
from backend.app.models.series_page import SeriesPage
|
||||||
|
|
||||||
|
svc = TagService(db)
|
||||||
|
a = await svc.find_or_create("SerA", TagKind.series)
|
||||||
|
b = await svc.find_or_create("SerB", TagKind.series)
|
||||||
|
img = await _img(db)
|
||||||
|
db.add(SeriesPage(series_tag_id=a.id, image_id=img, page_number=1))
|
||||||
|
await db.flush()
|
||||||
|
await svc.merge(a.id, b.id)
|
||||||
|
owner = await db.scalar(
|
||||||
|
select(SeriesPage.series_tag_id).where(SeriesPage.image_id == img)
|
||||||
|
)
|
||||||
|
assert owner == b.id
|
||||||
|
|||||||
Reference in New Issue
Block a user