49 lines
2.1 KiB
Python
49 lines
2.1 KiB
Python
"""
|
|
FILE: modules/web_api/llm/db/db_snapshots.py
|
|
"""
|
|
import json
|
|
from typing import Dict, Any, Optional
|
|
from .connection import get_db_connection
|
|
from .db_prompts import db_set_session_state
|
|
|
|
def db_get_snapshots(session_id: str = "web_session_main", date_str: Optional[str] = None, original_user_message: str = "") -> Dict[str, Any]:
|
|
conn = get_db_connection()
|
|
cursor = conn.cursor()
|
|
query = "SELECT snapshot_id, log_date, snapshot_time, COUNT(*) as record_count FROM scud_logs "
|
|
params = []
|
|
if date_str:
|
|
iso_date = date_str
|
|
if "." in date_str:
|
|
parts = date_str.split(".")
|
|
if len(parts) == 3:
|
|
iso_date = f"{parts[2]}-{parts[1]}-{parts[0]}"
|
|
query += " WHERE log_date = ? OR log_date = ? OR snapshot_time LIKE ? "
|
|
params.extend([date_str, iso_date, f"{iso_date}%"])
|
|
|
|
query += " GROUP BY snapshot_id ORDER BY id DESC LIMIT 50"
|
|
cursor.execute(query, params)
|
|
rows = cursor.fetchall()
|
|
snapshots = [dict(r) for r in rows]
|
|
|
|
result_data = {
|
|
"query_date": date_str or "все",
|
|
"snapshots_count": len(snapshots),
|
|
"snapshots": snapshots
|
|
}
|
|
db_set_session_state(session_id=session_id, state_type="SNAPSHOTS_VIEW", data=json.dumps(result_data, ensure_ascii=False))
|
|
conn.close()
|
|
return result_data
|
|
|
|
def db_delete_snapshots(snapshot_id: Optional[str] = None, day_str: Optional[str] = None) -> Dict[str, Any]:
|
|
if not snapshot_id and not day_str:
|
|
return {"status": "error", "message": "Необходимо указать snapshot_id или day_str (ДД.ММ.ГГГГ)."}
|
|
conn = get_db_connection()
|
|
cursor = conn.cursor()
|
|
if snapshot_id:
|
|
cursor.execute("DELETE FROM scud_logs WHERE snapshot_id = ?", (snapshot_id,))
|
|
else:
|
|
cursor.execute("DELETE FROM scud_logs WHERE log_date = ? OR snapshot_id LIKE ?", (day_str, f"%{day_str.replace('.', '')}%"))
|
|
deleted = cursor.rowcount
|
|
conn.commit()
|
|
conn.close()
|
|
return {"status": "success", "message": f"Успешно удалено записей: {deleted}"} |