draft-publication-debug
All checks were successful
Deploy on push / deploy (push) Successful in 48s

This commit is contained in:
Untone 2025-04-28 16:24:08 +03:00
parent f71fc7fde9
commit 5f3d90fc90

View File

@ -1,8 +1,5 @@
import time
from operator import or_
import trafilatura
from sqlalchemy.sql import and_
from sqlalchemy.orm import joinedload
from cache.cache import (
@ -385,7 +382,10 @@ async def publish_draft(_, info, draft_id: int):
draft_id: ID черновика для публикации
Returns:
dict: Опубликованная публикация и черновик или сообщение об ошибке
dict: Содержит одно из полей:
- error: Сообщение об ошибке, если публикация не удалась
- shout: Опубликованный объект Shout
- draft: Черновик (передается в ответе для совместимости с GraphQL схемой)
"""
user_id = info.context.get("user_id")
author_dict = info.context.get("author", {})
@ -488,13 +488,39 @@ async def publish_draft(_, info, draft_id: int):
# Для уже опубликованных материалов просто отправляем уведомление об обновлении
await notify_shout(shout.dict(), "update")
session.commit()
shout_dict = shout.dict()
# Добавляем объект автора в updated_by
shout_dict["updated_by"] = author_dict
return {"shout": shout_dict}
try:
# Фиксируем изменения
session.commit()
# После коммита преобразуем в словари для ответа
try:
# Важно: для GraphQL схемы возвращаем как shout, так и draft
# (поскольку в CommonResult определены оба поля)
shout_dict = shout.dict()
draft_dict = draft.dict()
# Логирование для отладки
logger.info(f"Successfully published shout #{shout.id} from draft #{draft.id}")
logger.debug(f"Shout data: {shout_dict}")
# Важно: возвращаем draft для CommonResult.draft и shout для CommonResult.shout
return {
"shout": shout_dict,
"draft": draft_dict,
"error": None
}
except Exception as serialize_error:
# Если случилась ошибка при сериализации
logger.error(f"Error serializing result: {serialize_error}", exc_info=True)
return {"error": f"Published successfully but failed to return result: {str(serialize_error)}"}
except Exception as commit_error:
# Ошибка при коммите
session.rollback()
logger.error(f"Commit error: {commit_error}", exc_info=True)
return {"error": f"Failed to save changes: {str(commit_error)}"}
except Exception as e:
# Общая ошибка обработки
logger.error(f"Failed to publish shout: {e}", exc_info=True)
if "session" in locals():
session.rollback()