"""import-store-links.""" from ddex_ingester_common.logging import utils as logging_utils from lambdacommon.graphql import graphql import config from config import graphql_gateway from constants import queries logger = logging_utils.get_logger(config.app_logger) def handler(event, context): """Lambda entry point.""" product_id = event.get('product_id') upc = str(event.get('upc')) apple_id = event.get('apple_id') spotify_store_link = event.get('spotify_store_link') deezer_store_link = event.get('deezer_store_link') digital_asin = event.get('digital_asin') sales_start_date = event.get('sales_start_date') if not product_id: raise ValueError('Product ID has no value.') if not upc: raise ValueError('UPC has no value.') if not sales_start_date: logger.info(f'Product {upc} Sales start date has no value.') return True if apple_id or spotify_store_link or deezer_store_link: payload = [] if apple_id: payload.append( construct_item( product_id, upc, str(apple_id), config.APPLE_STORE_ID, sales_start_date ) ) if spotify_store_link: payload.append( construct_item( product_id, upc, spotify_store_link.split(':')[-1], config.SPOTIFY_STORE_ID, sales_start_date ) ) if deezer_store_link: payload.append( construct_item( product_id, upc, deezer_store_link.split('/')[-1], config.DEEZER_STORE_ID, sales_start_date ) ) if digital_asin: payload.append( construct_item( product_id, upc, digital_asin, config.AMAZON_STORE_ID, sales_start_date ) ) try: graphql_gateway.execute( queries.import_store_links, {'data': {'storeLinks': payload}} ) except graphql.GraphQLError as err: raise Exception('Graphql error') from err except Exception as exp: raise Exception(f'Error importing store links.\n{exp}') from exp return True def construct_item(product_id, upc, store_link, store_id, sales_start_date): """Construct item for payload. Args: product_id (int): Product ID upc (str): UPC store_link (str): Store link store_id (int): Store ID sales_start_date (str): Sales start date Returns: dict """ return { 'productId': product_id, 'upc': upc, 'storeId': store_id, 'storeInternalId': store_link, 'status': 'live', 'salesStartDate': sales_start_date, 'storeInternalStatus': '', 'forcePolling': 0, 'receivedForPollingDate': 0, 'deliveryDate': 0, 'countryCodes': '', }