Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные. Дагаев / Проект_Кларк_Блинов_Яковлев.docx
Скачиваний:
1
Добавлен:
02.01.2026
Размер:
2.13 Mб
Скачать

2.4.4 Функции работы с пользовательскими данными

Этот модуль отвечает за управление персональными настройками пользователей и организацию их данных в локальной файловой системе. Вместо использования полноценной базы данных была выбрана файловая система, что упрощает развертывание, отладку и обеспечивает прозрачность хранения данных. Каждый пользователь имеет изолированное пространство в виде отдельной директории, названной по его Telegram ID.

Управление настройками:

1. user_dir(user_id: int) -> Path — создаёт и возвращает путь к персональной директории пользователя. Если директория не существует, она создаётся автоматически. Это обеспечивает готовность файловой системы к сохранению данных при первом обращении пользователя к боту.

2. prefs_path(user_id: int) -> Path — возвращает полный путь к файлу настроек пользователя prefs.json. Файл хранится внутри персональной директории и содержит все персонализированные параметры обработки изображений.

3. load_prefs(user_id: int) -> Dict[str, Any] — загружает настройки пользователя из JSON-файла. Если файл не существует или повреждён, функция возвращает значения по умолчанию. При загрузке происходит слияние дефолтных настроек и пользовательских, что гарантирует наличие всех необходимых полей. Пример работы:

· Проверяется существование файла prefs.json.

· Если файл есть, он читается и парсится как JSON.

· Если файла нет или он некорректен, возвращается копия DEFAULT_PREFS.

· Настройки пользователя имеют приоритет над дефолтными.

4. save_prefs(user_id: int, prefs: Dict[str, Any]) -> None — сохраняет обновлённые настройки пользователя в JSON-файл. Функция выполняет слияние текущих настроек с дефолтными, чтобы избежать потери обязательных полей, затем сериализует данные в формат JSON с отступами для удобства чтения и сохраняет файл в кодировке UTF-8.

2.4.5 PDF-сессии:

Модуль PDF-сессий реализует механизм временного хранения изображений в оперативной памяти для последующей сборки в единый PDF-документ. Это позволяет пользователю последовательно загружать несколько изображений, которые затем будут объединены в правильном порядке без необходимости их повторной загрузки или сохранения на диск.

Структура хранения сессий:

PDF_SESSIONS: Dict[int, List[bytes]] = {}

Рис. 17 – Словарь для сессий

· Ключ: user_id (int) — идентификатор пользователя в Telegram.

· Значение: список байтовых строк List[bytes], каждая из которых представляет собой исходное (несжатое) изображение.

Жизненный цикл PDF-сессии:

1. Инициация сессии — при получении команды /pdf_start для пользователя создаётся пустой список в словаре PDF_SESSIONS. Все последующие загруженные изображения будут добавляться в этот список.

2. Накопление изображений — каждое изображение, отправленное пользователем после начала сессии, сохраняется в виде исходных байтов (без сжатия) в соответствующем списке. Это гарантирует, что при сборке PDF будут использованы файлы максимального качества.

3. Завершение сессии — при получении команды /pdf_done:

· Из словаря извлекается список изображений пользователя.

· Если список пуст, пользователь получает соответствующее уведомление.