"""Youtube Channel model.""" import contextlib from typing import Any from sqlalchemy import Column, Date, Integer, String, select from sqlalchemy.orm import Session from video.connectors import mysql class YoutubeChannel(mysql.ArModel): """Youtube Channel.""" __tablename__ = "youtube_channel" primary_key = Column( Integer, name="id", nullable=False, primary_key=True, autoincrement=True, ) youtube_channel_name = Column(String) youtube_channel_id = Column(String) vendor_id = Column(Integer) artist_id = Column(Integer) date_initiated = Column(Date) def to_dict(self) -> dict[str, Any]: """Get a dict representation.""" return { "id": self.primary_key, "vendor_id": self.vendor_id, "channel_id": self.youtube_channel_id, "channel_name": self.youtube_channel_name, "artist_id": self.artist_id, "date_initiated": self.date_initiated.strftime("%Y-%m-%d") if self.date_initiated else None, } def get(vendor_id: int | None, session: Session | None = None) -> list[dict[str, Any]]: """Get by vendor_id. Returns empty list if vendor_id is None.""" if vendor_id is None: return [] ctx = mysql.ar_db_session() if session is None else contextlib.nullcontext(session) with ctx as s: channels = ( s.execute( select(YoutubeChannel).where(YoutubeChannel.vendor_id == vendor_id) ) .scalars() .all() ) return [c.to_dict() for c in channels]