from datetime import datetime, timezone from sqlalchemy import DateTime, update from sqlalchemy.dialects.mysql import BIGINT, INTEGER from sqlalchemy.orm import Mapped, Session, mapped_column from contributor.connectors.mysql import BaseModel class Release(BaseModel): __tablename__ = "releases" release_id: Mapped[int] = mapped_column( INTEGER(unsigned=True), primary_key=True, autoincrement=True, ) upc: Mapped[int] = mapped_column(BIGINT(unsigned=True), nullable=False) artist_id: Mapped[int] = mapped_column(INTEGER(unsigned=True), nullable=False) project_id: Mapped[int] = mapped_column(INTEGER(unsigned=True), nullable=False) last_updated: Mapped[datetime | None] = mapped_column(DateTime, nullable=True) def reassign_contributor_releases( *, session: Session, contributor_artist_info_id: int, duplicate_artist_info_id: int, ) -> None: """Reassign all releases with a given artist_info_id to a new artist_info_id.""" session.execute( update(Release) .where(Release.artist_id == duplicate_artist_info_id) .values( artist_id=contributor_artist_info_id, last_updated=datetime.now(timezone.utc), ) ) session.commit()