"""Podcast Links Model.""" import sqlalchemy from sqlalchemy import ForeignKey from sqlalchemy.dialects.mysql import INTEGER from podcast.connectors import mysql from podcast.constants import stores as podcast_stores class Store(mysql.BaseModel): """Store model.""" __tablename__ = 'store' id = sqlalchemy.Column(sqlalchemy.Integer, primary_key=True, autoincrement=True) # noqa name = sqlalchemy.Column(sqlalchemy.VARCHAR(255)) def to_dict(self): """Return the object as dictionary.""" return dict( id=self.id, name=self.name, ) class PodcastLink(mysql.BaseModel): """Podcast Link model.""" __tablename__ = 'podcast_link' id = sqlalchemy.Column(INTEGER(unsigned=True), primary_key=True, autoincrement=True) # noqa podcast_id = sqlalchemy.Column( INTEGER, ForeignKey('podcast.id'), nullable=False ) store_id = sqlalchemy.Column( INTEGER, ForeignKey('store.id'), nullable=False ) link = sqlalchemy.Column(sqlalchemy.VARCHAR(510), nullable=False) def to_dict(self): """Return the object as dictionary.""" return dict( id=self.id, podcast_id=self.podcast_id, store_id=self.store_id, link=self.link, ) def get_stores(): """Return all the stores.""" with mysql.pod_db_session(read_only=True) as session: query = session.query(Store) rows = query.all() items = [row.to_dict() for row in rows] return {'items': items} def get_apple_store(): """Return apple store.""" stores = get_stores()['items'] return [store for store in stores if store['name'] == podcast_stores.APPLE_PODCAST][0] def get_website_embed_store(): """Return website embed store.""" stores = get_stores()['items'] return [store for store in stores if store['name'] == podcast_stores.WEBSITE_EMBED_CODE][0] def get_podcast_links(podcast_id): """Get all podcast links for a podcast.""" with mysql.pod_db_session() as session: podcast_links = session.query(PodcastLink).filter( PodcastLink.podcast_id == podcast_id, ).all() return {'items': [x.to_dict() for x in podcast_links]} def create_podcast_links(data): """Create podcast links for a podcast.""" podcast_id = data['podcast_id'] links = data['links'] with mysql.pod_db_session() as session: podcast_link = session.query(PodcastLink).filter( PodcastLink.podcast_id == podcast_id, ).delete() results = [] for link in links: link['podcast_id'] = podcast_id podcast_link = PodcastLink(**link) session.add(podcast_link) results.append(podcast_link) session.flush() return {'items': [x.to_dict() for x in results]} def create_podcast_link(data): """Create podcast link for a podcast.""" with mysql.pod_db_session() as session: podcast_link = PodcastLink(**data) session.add(podcast_link) session.flush() return podcast_link.to_dict()