feat: идемпотентность DTC + prompt учитывает неточности данных
This commit is contained in:
+24
-1
@@ -274,6 +274,14 @@ def register(app):
|
||||
client_info = data.get("client_info", {})
|
||||
client_info["client_ip"] = request.remote_addr
|
||||
|
||||
# Идемпотентность
|
||||
request_id = (data.get("request_id") or "").strip()
|
||||
if request_id:
|
||||
with Database() as db:
|
||||
cached = db.get_cached_response(request_id)
|
||||
if cached is not None:
|
||||
return jsonify(cached), 200
|
||||
|
||||
try:
|
||||
with Database() as db:
|
||||
db.save_dtc_scan(client_info, codes)
|
||||
@@ -282,7 +290,22 @@ def register(app):
|
||||
|
||||
dtc = _load_dtc_dict()
|
||||
decoded = [{"code": c, "desc": dtc.get(c.strip().upper(), c)} for c in codes]
|
||||
return jsonify({"codes": decoded, "count": len(decoded)})
|
||||
response = {"codes": decoded, "count": len(decoded)}
|
||||
|
||||
# Сохраняем кэш для идемпотентности
|
||||
if request_id:
|
||||
try:
|
||||
with Database() as db:
|
||||
db.save_session(
|
||||
client_info=client_info,
|
||||
responses=[{"decoded": f"DTC stored: {c}"} for c in codes],
|
||||
request_id=request_id,
|
||||
response_json=response,
|
||||
)
|
||||
except Exception as e:
|
||||
logger.error(f"DTC idempotency cache failed: {e}")
|
||||
|
||||
return jsonify(response)
|
||||
|
||||
|
||||
def _summary(p: dict) -> dict:
|
||||
|
||||
Reference in New Issue
Block a user