[30388f42] Infrastructure Hardening: Repaired CE/Connector DB schema, fixed frontend styling build, implemented robust echo shield in worker v2.1.1, and integrated Lead Engine into gateway.
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
import os
|
||||
import requests
|
||||
import json
|
||||
from dotenv import load_dotenv
|
||||
|
||||
load_dotenv()
|
||||
|
||||
NOTION_API_KEY = os.getenv("NOTION_API_KEY")
|
||||
NOTION_DB_ID = "2ec88f4285448014ab38ea664b4c2b81" # Verticals DB
|
||||
PRODUCT_DB_ID = "2ec88f42854480f0b154f7a07342eb58" # Product Categories DB (from user link)
|
||||
|
||||
headers = {
|
||||
"Authorization": f"Bearer {NOTION_API_KEY}",
|
||||
"Notion-Version": "2022-06-28",
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
|
||||
# 1. Fetch Product Map (ID -> Name)
|
||||
product_map = {}
|
||||
def fetch_products():
|
||||
url = f"https://api.notion.com/v1/databases/{PRODUCT_DB_ID}/query"
|
||||
response = requests.post(url, headers=headers, json={"page_size": 100})
|
||||
if response.status_code == 200:
|
||||
results = response.json().get("results", [])
|
||||
for p in results:
|
||||
p_id = p["id"]
|
||||
# Name property might be "Name" or "Product Category"
|
||||
props = p["properties"]
|
||||
name = "Unknown"
|
||||
if "Name" in props:
|
||||
name = props["Name"]["title"][0]["plain_text"] if props["Name"]["title"] else "N/A"
|
||||
elif "Product Category" in props:
|
||||
name = props["Product Category"]["title"][0]["plain_text"] if props["Product Category"]["title"] else "N/A"
|
||||
|
||||
product_map[p_id] = name
|
||||
# Also map the page ID itself if used in relations
|
||||
|
||||
else:
|
||||
print(f"Error fetching products: {response.status_code}")
|
||||
|
||||
# 2. Check Verticals with Relation Resolution
|
||||
def check_vertical_relations(search_term):
|
||||
url = f"https://api.notion.com/v1/databases/{NOTION_DB_ID}/query"
|
||||
payload = {
|
||||
"filter": {
|
||||
"property": "Vertical",
|
||||
"title": {
|
||||
"contains": search_term
|
||||
}
|
||||
}
|
||||
}
|
||||
resp = requests.post(url, headers=headers, json=payload)
|
||||
if resp.status_code == 200:
|
||||
results = resp.json().get("results", [])
|
||||
if not results:
|
||||
print(f"❌ No vertical found for '{search_term}'")
|
||||
return
|
||||
|
||||
for page in results:
|
||||
props = page["properties"]
|
||||
title = props["Vertical"]["title"][0]["plain_text"]
|
||||
|
||||
# Resolve Primary
|
||||
pp_ids = [r["id"] for r in props.get("Primary Product Category", {}).get("relation", [])]
|
||||
pp_names = [product_map.get(pid, pid) for pid in pp_ids]
|
||||
|
||||
# Resolve Secondary
|
||||
sp_ids = [r["id"] for r in props.get("Secondary Product", {}).get("relation", [])]
|
||||
sp_names = [product_map.get(pid, pid) for pid in sp_ids]
|
||||
|
||||
print(f"\n🔹 VERTICAL: {title}")
|
||||
print(f" Primary Product (Rel): {', '.join(pp_names)}")
|
||||
print(f" Secondary Product (Rel): {', '.join(sp_names)}")
|
||||
|
||||
# Pains/Gains short check
|
||||
pains = props.get("Pains", {}).get("rich_text", [])
|
||||
print(f" Pains Length: {len(pains[0]['plain_text']) if pains else 0} chars")
|
||||
|
||||
else:
|
||||
print(f"Error fetching vertical: {resp.status_code}")
|
||||
|
||||
# Run
|
||||
print("Fetching Product Map...")
|
||||
fetch_products()
|
||||
print(f"Loaded {len(product_map)} products.")
|
||||
|
||||
print("\nChecking Verticals...")
|
||||
targets = ["Hospital", "Hotel", "Logistics", "Manufacturing", "Retail", "Reinigungs", "Dienstleister", "Facility"]
|
||||
for t in targets:
|
||||
check_vertical_relations(t)
|
||||
Reference in New Issue
Block a user