Files
tg-sd/utils/image_manager.py
T
dinlo b88ccf3b4b Initial commit
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-31 18:46:09 +08:00

61 lines
2.1 KiB
Python

"""Модуль управления изображениями и их очистки."""
import logging
import os
from datetime import datetime
from config import settings
from database.database import db
logger = logging.getLogger(__name__)
async def cleanup_expired_images() -> int:
"""
Удалить просроченные изображения.
Возвращает количество удалённых изображений.
"""
expired = await db.get_expired_images()
deleted_count = 0
for image in expired:
# Удаляем файл
file_path = image["file_path"]
try:
if os.path.exists(file_path):
os.remove(file_path)
logger.debug(f"Удалён файл: {file_path}")
except Exception as e:
logger.error(f"Ошибка удаления файла {file_path}: {e}")
# Удаляем запись из БД
try:
await db.delete_image_record(image["id"])
deleted_count += 1
except Exception as e:
logger.error(f"Ошибка удаления записи изображения {image['id']}: {e}")
if deleted_count > 0:
logger.info(f"Удалено {deleted_count} просроченных изображдений")
return deleted_count
def get_image_path(user_id: int, filename: str) -> str:
"""
Получить путь для сохранения изображения.
Формат: images/{user_id}/{filename}
"""
user_dir = os.path.join(settings.IMAGES_DIR, str(user_id))
os.makedirs(user_dir, exist_ok=True)
return os.path.join(user_dir, filename)
def cleanup_user_images(user_id: int) -> None:
"""Удалить все изображения пользователя (при необходимости)."""
user_dir = os.path.join(settings.IMAGES_DIR, str(user_id))
if os.path.exists(user_dir):
import shutil
shutil.rmtree(user_dir)
logger.info(f"Удалены все изображения пользователя {user_id}")