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(
|
||||
source_id, target_id, source_kind
|
||||
)
|
||||
await self._repoint_series_pages(source_id, target_id)
|
||||
|
||||
alias_created = False
|
||||
if keep_as_alias:
|
||||
@@ -400,6 +401,17 @@ class TagService:
|
||||
.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(
|
||||
self, src: int, tgt: int, src_kind: TagKind
|
||||
) -> None:
|
||||
|
||||
@@ -410,3 +410,20 @@ async def test_alias_create_does_not_clobber_existing(db):
|
||||
)
|
||||
)
|
||||
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