Initial commit
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1 @@
|
||||
# Утилиты
|
||||
@@ -0,0 +1,60 @@
|
||||
"""Модуль управления изображениями и их очистки."""
|
||||
|
||||
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}")
|
||||
Reference in New Issue
Block a user