from src.connectors.neo4j import get_session def get_explicitly_followed_vendors(email: str, subscription_name: str, profile_type: str = "LabelProfile"): """ Get explicitly followed vendors :param email: email from identity :param subscription_name: e.g. label_analytics_digest :param profile_type: :return: List of vendor ids user followed """ query = f""" MATCH (i:Identity)-[:HAS_PROFILE]->(p:Profile)-[:HAS_FOLLOWED_{subscription_name.upper()}]->(v:Vendor) WHERE i.email=$email AND p.profileType=$profile_type RETURN v as vendor, p as profile """ with get_session() as session: result = list(session.run(query, email=email, profile_type=profile_type)) return result def get_auto_followed_vendors(email: str, subscription_name: str, profile_type: str = "LabelProfile"): """ Get auto followed vendors :param email: email from identity :param subscription_name: e.g. label_analytics_digest :param profile_type: :return: List of vendor ids user followed """ query = """ MATCH (s:Subscription)<-[:HAS_AUTO_FOLLOWED]-(i:Identity)-[:HAS_PROFILE]->(p:Profile)-[:HAS_ACCESS_TO]->(v:Vendor) WHERE i.email=$email AND p.profileType=$profile_type AND s.followedEntity='Vendor' AND s.name=$subscription_name RETURN v as vendor, p as profile """ with get_session() as session: result = list(session.run(query, email=email, profile_type=profile_type, subscription_name=subscription_name)) return result def get_explicitly_followed_subaccounts(email: str, subscription_name: str, profile_type: str = "LabelProfile"): """ Get explicitly followed subaccounts :param email: email from identity :param subscription_name: e.g. label_analytics_digest :param profile_type: :return: List of vendor ids user followed """ query = f""" MATCH (i:Identity)-[:HAS_PROFILE]->(p:Profile) WHERE i.email=$email AND p.profileType=$profile_type WITH p OPTIONAL MATCH (p)-[:HAS_FOLLOWED_{subscription_name.upper()}]->(v:Vendor)-[:OWNS]->(sub1:Subaccount) OPTIONAL MATCH (p)-[:HAS_FOLLOWED_{subscription_name.upper()}]->(sub2:Subaccount) WITH p as profile, collect(sub1) + collect(sub2) as listSubaccounts UNWIND listSubaccounts as subaccount RETURN DISTINCT subaccount, profile """ # noqa: E501 with get_session() as session: result = list(session.run(query, email=email, profile_type=profile_type)) return result def get_auto_followed_subaccounts(email: str, subscription_name: str, profile_type: str = "LabelProfile"): """ Get auto followed subaccounts :param email: email from identity :param subscription_name: e.g. label_analytics_digest :param profile_type: :return: List of vendor ids user followed """ query = """ MATCH (s:Subscription)<-[:HAS_AUTO_FOLLOWED]-(i:Identity)-[:HAS_PROFILE]->(p:Profile) WHERE i.email=$email AND p.profileType=$profile_type AND s.followedEntity='Subaccount' AND s.name=$subscription_name WITH p OPTIONAL MATCH (p)-[:HAS_ACCESS_TO]->(v:Vendor)-[:OWNS]->(sub1:Subaccount) OPTIONAL MATCH (p)-[:HAS_ACCESS_TO]->(sub2:Subaccount) WITH p as profile, collect(sub1) + collect(sub2) as listSubaccounts UNWIND listSubaccounts as subaccount RETURN DISTINCT subaccount, profile """ # noqa: E501 with get_session() as session: result = list(session.run(query, email=email, profile_type=profile_type, subscription_name=subscription_name)) return result