""" Модуль выгрузки и очистки срезов/снапшотов СКУД. """ import json from typing import Dict, Any, Optional from .connection import get_db_connection from .db_prompts import db_set_session_state def smart_parse_date(date_str: Optional[str], original_user_message: str = "") -> Optional[str]: return date_str def db_get_snapshots(session_id: str = "web_session_main", date_str: Optional[str] = None, original_user_message: str = "") -> Dict[str, Any]: date_str = smart_parse_date(date_str, original_user_message) 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,)) deleted = cursor.rowcount 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}"}