This commit is contained in:
jze9
2026-05-15 20:12:44 +05:00
parent 2335497226
commit dd7d8a7ccf
21 changed files with 672 additions and 121 deletions

View File

@@ -1,3 +1,4 @@
import os
import uuid
from datetime import datetime
from typing import Optional
@@ -9,9 +10,11 @@ from sqlalchemy.orm import selectinload
import redis.asyncio as aioredis
from bd.database import get_db, get_redis
from bd.models import Article, Category, Tag, ArticleStatus
from bd.models import Article, Category, Tag, ArticleStatus, Media
from route.deps import require_admin
MINIO_BUCKET = os.getenv("MINIO_BUCKET", "news-media")
router = APIRouter()
@@ -208,6 +211,26 @@ async def delete_article(
article = (await db.execute(select(Article).where(Article.id == uuid.UUID(article_id)))).scalar_one_or_none()
if not article:
raise HTTPException(status_code=404, detail="Not found")
# Удаляем все связанные медиафайлы из MinIO и БД
media_items = (await db.execute(
select(Media).where(Media.article_id == article.id)
)).scalars().all()
if media_items:
from route.admin_media import get_minio
try:
client = get_minio()
for m in media_items:
obj = m.url.split(f"/{MINIO_BUCKET}/", 1)[-1]
try:
client.remove_object(MINIO_BUCKET, obj)
except Exception:
pass
await db.delete(m)
except Exception:
pass
await db.delete(article)
await db.commit()
await _invalidate_cache(redis)