fix teg
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user