From 4f871d20f1d380c6499dae4f543b45dba08284ba Mon Sep 17 00:00:00 2001 From: Kseninia Mikhaylova Date: Wed, 20 Nov 2024 16:00:51 +0300 Subject: [PATCH] old ver --- app/main.py | 100 ++++++++++++++++++++++++++++++------------- front/pages/deal.vue | 2 +- 2 files changed, 71 insertions(+), 31 deletions(-) diff --git a/app/main.py b/app/main.py index 9570c78..f1153a3 100644 --- a/app/main.py +++ b/app/main.py @@ -157,29 +157,79 @@ async def tg_intgr_get(request: Request): logger.info(e) return {"status": "error"} +def extract_id(params): + json_strings = params.get("PLACEMENT_OPTIONS", []) + for json_str in json_strings: + try: + data = json.loads(json_str) + if "ID" in data: + return data["ID"] + except json.JSONDecodeError: + print(f"Ошибка: Некорректная JSON-строка - {json_str}") + +def get_task_by_deal(deal_id): + select = [ + "ID", + "TITLE", + "RESPONSIBLE_ID", + "CREATED_DATE", + "DEADLINE", + "STATUS", + "GROUP_ID", + ] + get_task_hook = f"{WEBHOOK}/tasks.task.list?{'&'.join([f'select[]={s}' for s in select])}&filter[UF_CRM_TASK]=D_{deal_id}" + task_data = requests.get(get_task_hook) + task_data_json = task_data.json() + result = task_data_json["result"]["tasks"] -@app.post("/deal_tab/{deal_id}") + while len(task_data_json["result"]["tasks"]) == 50 and len(result) < 50 * 4: + limit = (len(result) // 50) * 50 + task_data = requests.get(get_task_hook + f"&start={limit}") + task_data_json = task_data.json() + result += task_data_json["result"]["tasks"] + + return result + +@app.post("/deal_tab") +async def deal_tab( + request: Request, + DOMAIN: str | None = None, + PROTOCOL: str | None = None, + LANG: str | None = None, + APP_SID: str | None = None, +): + try: + body = await request.body() + b_str = body.decode() + result = parse_qs(b_str) + q = [DOMAIN, PROTOCOL, LANG, APP_SID] + + + deal_id = extract_id(result) + if not deal_id: + raise('not deal id') + deal_id = 49 + + result = get_task_by_deal(deal_id) + + # logger.info(task_data_json["result"]["tasks"]) + parts = WEBHOOK.split("/") + domain = f"https://{parts[2]}" + return templates.TemplateResponse( + request=request, + name="deal_tab.html", + context={"tasks": result, "domain": domain}, + ) + + return {"status": "success", "result": task_data_json} + except Exception as e: + logger.error(e) + return {"status": "error"} + +@app.post("/widget/deal_tab/{deal_id}") async def deal_tab(request: Request, deal_id): try: - select = [ - "ID", - "TITLE", - "RESPONSIBLE_ID", - "CREATED_DATE", - "DEADLINE", - "STATUS", - "GROUP_ID", - ] - get_task_hook = f"{WEBHOOK}/tasks.task.list?{'&'.join([f'select[]={s}' for s in select])}&filter[UF_CRM_TASK]=D_{deal_id}" - task_data = requests.get(get_task_hook) - task_data_json = task_data.json() - result = task_data_json["result"]["tasks"] - - while len(task_data_json["result"]["tasks"]) == 50 and len(result) < 50 * 4: - limit = (len(result) // 50) * 50 - task_data = requests.get(get_task_hook + f"&start={limit}") - task_data_json = task_data.json() - result += task_data_json["result"]["tasks"] + result = get_task_by_deal(deal_id) # logger.info(task_data_json["result"]["tasks"]) parts = WEBHOOK.split("/") @@ -206,16 +256,6 @@ async def handle_widget_post(request: Request): b_str = body.decode() result = parse_qs(b_str) - def extract_id(params): - json_strings = params.get("PLACEMENT_OPTIONS", []) - for json_str in json_strings: - try: - data = json.loads(json_str) - if "ID" in data: - return data["ID"] - except json.JSONDecodeError: - print(f"Ошибка: Некорректная JSON-строка - {json_str}") - deal_id = extract_id(result) if not deal_id: raise ("not deal id") diff --git a/front/pages/deal.vue b/front/pages/deal.vue index b95bd4c..e535223 100644 --- a/front/pages/deal.vue +++ b/front/pages/deal.vue @@ -38,7 +38,7 @@ export interface GroupClass { } const loadData = async (deal_id: number) => { - const res = await $fetch(`${config.public.apiBase}/deal_tab/${deal_id}`, { method: 'POST' }) + const res = await $fetch(`${config.public.apiBase}/widget/deal_tab/${deal_id}`, { method: 'POST' }) if (res.status == 'success') { data.value = res.result formatter.value = res.format