diff --git a/.gitignore b/.gitignore index 44945fe..066efe8 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,4 @@ config.py .env .venv /schedule_requests.json* +/navigator_requests.json* diff --git a/bot/main/register_user.py b/bot/main/register_user.py index 8a2fdc0..b9cac5f 100644 --- a/bot/main/register_user.py +++ b/bot/main/register_user.py @@ -13,7 +13,6 @@ from models.schedule import ( group_target, search_targets, ) -from models.schedule_request_log import append_schedule_request from models.user import getAllUsers, validate from utils import convert @@ -34,10 +33,6 @@ def start(message: Message): if not search_target_kind: return send(message, "Не удалось определить тип расписания по ссылке.") search_query = convert.decode(query[3:]) - try: - append_schedule_request(search_query) - except (OSError, ValueError) as error: - logger.error("Schedule", f"[{user.id}] Failed to save request: {error}") try: results = search_targets(search_target_kind, search_query, limit=10) except ScheduleAPIError as error: @@ -128,10 +123,6 @@ def _finish_registration(message: Message, group_name: str) -> None: ) def selectGroupState(message: Message): query = (message.text or "").strip() - try: - append_schedule_request(query) - except (OSError, ValueError) as error: - logger.error("Schedule", f"[{message.from_user.id}] Failed to save request: {error}") try: matches = find_main_groups(query) if len(matches) == 1 and group_exists(query): diff --git a/bot/navigator.py b/bot/navigator.py index 3635bcd..c51222f 100644 --- a/bot/navigator.py +++ b/bot/navigator.py @@ -17,6 +17,7 @@ from models.navigator import ( encode_route, parse_route_request, ) +from models.navigator_request_log import append_navigator_request _SEEN_REQUESTS: dict[tuple[int, str], float] = {} @@ -124,6 +125,11 @@ def route_request_from_webapp(message: Message): if not _validate_map_rooms(request): return send(message, "Одной из аудиторий нет на карте. Выбери аудитории из подсказок.") + try: + append_navigator_request(request) + except (OSError, ValueError) as error: + logger.error("Navigator", f"[{message.from_user.id}] failed to save request: {error}") + try: route = calculate_route(request) except Exception as error: # keep a future adapter from breaking polling diff --git a/bot/schedule/search.py b/bot/schedule/search.py index ae791f5..0ab56cd 100644 --- a/bot/schedule/search.py +++ b/bot/schedule/search.py @@ -9,7 +9,6 @@ from models.schedule import ( generateWeekSchedule, search_targets, ) -from models.schedule_request_log import append_schedule_request from models.user import User, validate @@ -109,13 +108,8 @@ def search_query(message: Message): return open_schedule_viewer(message, selected) kind = str(user.state).partition(":")[2] - query = message.text or "" try: - append_schedule_request(query) - except (OSError, ValueError) as error: - logger.error("Schedule", f"[{user.id}] Failed to save request: {error}") - try: - results = search_targets(kind, query, limit=10) # type: ignore + results = search_targets(kind, message.text or "", limit=10) # type: ignore except ScheduleAPIError as error: logger.error("Schedule", f"[{user.id}] {error}") return send(message, "Сервер расписания сейчас недоступен. Попробуй ещё раз позже.") diff --git a/models/schedule_request_log.py b/models/navigator_request_log.py similarity index 64% rename from models/schedule_request_log.py rename to models/navigator_request_log.py index 30dc19f..2bb518d 100644 --- a/models/schedule_request_log.py +++ b/models/navigator_request_log.py @@ -5,18 +5,16 @@ import threading from pathlib import Path from zoneinfo import ZoneInfo +from .navigator import RouteRequest + _MOSCOW = ZoneInfo("Europe/Moscow") -_LOG_PATH = Path("schedule_requests.json") +_LOG_PATH = Path("navigator_requests.json") _LOCK = threading.RLock() -def append_schedule_request(request: str) -> None: - """Append a user-entered schedule search to the persistent JSON history.""" - value = request.strip() - if not value: - return - +def append_navigator_request(request: RouteRequest) -> None: + """Append a validated navigator request to the persistent JSON history.""" with _LOCK: try: with _LOG_PATH.open("r", encoding="utf-8") as file: @@ -30,7 +28,14 @@ def append_schedule_request(request: str) -> None: history.append( { "time": datetime.datetime.now(_MOSCOW).isoformat(timespec="seconds"), - "request": value, + "start": { + "room": request.start.room, + "floor": request.start.floor, + }, + "end": { + "room": request.end.room, + "floor": request.end.floor, + }, } )