полный лог _upload_json: 12 шагов, v1.25

This commit is contained in:
2026-06-17 19:51:33 +04:00
parent c3232c43e7
commit 5ce38d0735
+20 -2
View File
@@ -134,13 +134,16 @@ class ContractsApp:
def _upload_json(self): def _upload_json(self):
"""Принять файл как base64. Сохранить строкой (без декодирования — быстро).""" """Принять файл как base64. Сохранить строкой (без декодирования — быстро)."""
_log("upload_entry", "start")
try:
data = request.get_json(silent=True) data = request.get_json(silent=True)
_log("upload_entry", f"data={'yes' if data else 'no'}") _log("upload_json_parsed", f"data={'yes' if data else 'no'} len={len(request.data) if request.data else 0}")
if not data: if not data:
return jsonify({"error": "Нет JSON"}), 400 return jsonify({"error": "Нет JSON"}), 400
filename = data.get("filename", "") filename = data.get("filename", "")
b64 = data.get("data", "") b64 = data.get("data", "")
_log("upload_fields", f"file={filename} b64_len={len(b64) if b64 else 0} cid={data.get('cid')}")
if not filename or not b64: if not filename or not b64:
return jsonify({"error": "Нет filename или data"}), 400 return jsonify({"error": "Нет filename или data"}), 400
@@ -148,42 +151,57 @@ class ContractsApp:
cid = data.get("cid") cid = data.get("cid")
conn, err = db.connect() conn, err = db.connect()
_log("upload_connect", f"err={err}")
if err: if err:
return jsonify({"error": f"БД: {err}"}), 500 return jsonify({"error": f"БД: {err}"}), 500
try: try:
cur = conn.cursor() cur = conn.cursor()
if cid: if cid:
contract_id = cid contract_id = cid
_log("upload_contract", f"reuse cid={cid}")
else: else:
cur.execute( cur.execute(
"INSERT INTO contracts (number, client) VALUES (%s, %s) RETURNING id", "INSERT INTO contracts (number, client) VALUES (%s, %s) RETURNING id",
("б" + __import__("datetime").datetime.now().strftime("%Y%m%d-%H%M"), ""), ("б" + __import__("datetime").datetime.now().strftime("%Y%m%d-%H%M"), ""),
) )
contract_id = cur.fetchone()[0] contract_id = cur.fetchone()[0]
_log("upload_contract", f"new cid={contract_id}")
# Сохранить base64 как текст (быстро)
cur.execute( cur.execute(
"INSERT INTO documents (filename, mime_type, original_b64, status) VALUES (%s,%s,%s,'uploaded')", "INSERT INTO documents (filename, mime_type, original_b64, status) VALUES (%s,%s,%s,'uploaded')",
(filename, mime, b64), (filename, mime, b64),
) )
_log("upload_doc_insert", "ok")
cur.execute("SELECT id FROM documents WHERE filename=%s AND status='uploaded' ORDER BY created_at DESC LIMIT 1", (filename,)) cur.execute("SELECT id FROM documents WHERE filename=%s AND status='uploaded' ORDER BY created_at DESC LIMIT 1", (filename,))
row = cur.fetchone() row = cur.fetchone()
doc_id = row[0] if row else None doc_id = row[0] if row else None
_log("upload_doc_select", f"doc_id={doc_id}")
if doc_id: if doc_id:
cur.execute( cur.execute(
"INSERT INTO supplements (contract_id, document_id, type) VALUES (%s,%s,'initial')", "INSERT INTO supplements (contract_id, document_id, type) VALUES (%s,%s,'initial')",
(str(contract_id), str(doc_id)), (str(contract_id), str(doc_id)),
) )
_log("upload_suppl", "ok")
conn.commit() conn.commit()
_log("upload_commit", "ok")
cur.close() cur.close()
except Exception as e: except Exception as e:
_log("upload_error", str(e))
try: conn.rollback() try: conn.rollback()
except: pass except: pass
raise e raise e
finally: finally:
db.put_conn(conn) db.put_conn(conn)
_log("upload_putconn", "ok")
_log("upload_done", f"cid={contract_id} doc={doc_id}")
return jsonify({"contract_id": str(contract_id), "doc_id": str(doc_id) if doc_id else None}) return jsonify({"contract_id": str(contract_id), "doc_id": str(doc_id) if doc_id else None})
except Exception as e:
_log("upload_outer_error", str(e))
return jsonify({"error": f"Крах: {e}"}), 500
# ── Чанковая загрузка ────────────────────────────────────── # ── Чанковая загрузка ──────────────────────────────────────