"""Glue service: adopt anonymous cart items + calendar entries for a logged-in user.""" from __future__ import annotations from sqlalchemy import select, update, func from sqlalchemy.ext.asyncio import AsyncSession from shared.models.market import CartItem from shared.models.calendars import CalendarEntry async def adopt_session_for_user( session: AsyncSession, user_id: int, session_id: str, ) -> None: """Adopt anonymous cart items + calendar entries for a logged-in user.""" # --- adopt cart items --- anon_result = await session.execute( select(CartItem).where( CartItem.deleted_at.is_(None), CartItem.user_id.is_(None), CartItem.session_id == session_id, ) ) anon_items = anon_result.scalars().all() if anon_items: # Soft-delete existing user cart await session.execute( update(CartItem) .where(CartItem.deleted_at.is_(None), CartItem.user_id == user_id) .values(deleted_at=func.now()) ) for ci in anon_items: ci.user_id = user_id # --- adopt calendar entries --- await session.execute( update(CalendarEntry) .where(CalendarEntry.deleted_at.is_(None), CalendarEntry.user_id == user_id) .values(deleted_at=func.now()) ) cal_result = await session.execute( select(CalendarEntry).where( CalendarEntry.deleted_at.is_(None), CalendarEntry.session_id == session_id, ) ) for entry in cal_result.scalars().all(): entry.user_id = user_id