"""Logic Tier for Episode Links.""" from podcast.constants.common import APPLE_SUBSCRIPTION from podcast.constants.common import PUBLIC_RSS from podcast.constants.feature_flag import FEATURE_PODCAST_IA_RESTRUCTURE from podcast.constants.stores import APPLE_PODCAST_STORE_ID from podcast.logic import user as user_logic from podcast.logic import user_v2 as user_v2_logic from podcast.models import episode_links as episode_links_model from podcast.models import podcast as podcast_model from podcast.models import podcast_links as podcast_links_model from podcast.models.episode import update_episode from podcast.utils import feature_flag_utils def get_episode_links(podcast_id, episode_id): """Get all episode links for an episode. Args: podcast_id (int): The podcast unique identifier. episode_id (int): The episode unique identifier. Returns: dict: containing a list of dicts with episode links metadata. """ podcast = podcast_model.get_podcast_by_id(podcast_id) if feature_flag_utils.get_feature_flag(FEATURE_PODCAST_IA_RESTRUCTURE): user_v2_logic.current_user_owns_show_family_or_raise(podcast['show_family_id']) else: user_logic.current_user_owns_podcast_or_raise(podcast) return episode_links_model.get_episode_links_by_episode_id(episode_id) def create_episode_link(data): """Create episode link. If apple episode link and one of public-rss or apple-subscription feeds then, get apple_id from link and update apple_id for that episode. Returns: dict: containing a dict with the created episode link. """ user_logic.current_user_is_org_admin_or_raise() if data['store_id'] == APPLE_PODCAST_STORE_ID: podcast = podcast_model.get_podcast_by_id(data['podcast_id']) if podcast['feed_type'] in (PUBLIC_RSS, APPLE_SUBSCRIPTION): apple_id = data['link'].split('?i=')[1] update_episode(data['episode_id'], {'apple_id': apple_id}) return episode_links_model.create_or_update_episode_link(data) def create_embed_code_episode_link(podcast_id, episode_id, guid): """Create website embed code episode link for an episode. Args: podcast_id (int): The podcast unique identifier. episode_id (int): The episode unique identifier. guid (str): The megaphone uid for an episode. Returns: dict: containing a dict with the created episode link for website embeb code. """ store_id = podcast_links_model.get_website_embed_store()['id'] url = 'https://playlist.megaphone.fm?e={}'.format(guid) link = ''.format(url) episode_links_model.create_or_update_episode_link( {'episode_id': episode_id, 'podcast_id': podcast_id, 'store_id': store_id, 'link': link}) def delete_episode_link(episode_id, store_id): """Delete episode link function. Args: episode_id (int): The unique identifier of the episode. store_id (int): The unique identifier of the store. Returns: dict: containing a dict with the deleted episode link id. """ user_logic.current_user_is_org_admin_or_raise() return episode_links_model.delete_episode_link(episode_id, store_id)