### 📦 Added - **Автоматическое определение главного топика**: Система автоматически назначает главный топик при публикации - **Валидация топиков при публикации**: Проверка наличия хотя бы одного топика перед публикацией ### 🏗️ Changed - **Исправлена логика публикации черновиков**: Теперь автоматически устанавливается главный топик при отсутствии - **Обновлена логика создания статей**: Гарантируется наличие главного топика во всех публикациях ### 🐛 Fixed - **Исправлена критическая ошибка с публикацией статей**: Статьи теперь корректно появляются в фидах после публикации - **Гарантирован главный топик**: Все опубликованные статьи теперь обязательно имеют главный топик (`main=True`)
This commit is contained in:
@@ -358,12 +358,17 @@ async def update_draft(_: None, info: GraphQLResolveInfo, draft_id: int, draft_i
|
||||
if topic_ids:
|
||||
# Очищаем текущие связи
|
||||
session.query(DraftTopic).where(DraftTopic.draft == draft_id).delete()
|
||||
# 🔍 Если главный топик не указан, делаем первый топик главным
|
||||
if not main_topic_id:
|
||||
main_topic_id = topic_ids[0]
|
||||
logger.info(f"No main topic specified for draft {draft_id}, using first topic {main_topic_id}")
|
||||
|
||||
# Добавляем новые связи
|
||||
for tid in topic_ids:
|
||||
dt = DraftTopic(
|
||||
draft=draft_id,
|
||||
topic=tid,
|
||||
main=(tid == main_topic_id) if main_topic_id else False,
|
||||
main=(tid == main_topic_id),
|
||||
)
|
||||
session.add(dt)
|
||||
|
||||
@@ -526,10 +531,23 @@ async def publish_draft(_: None, info: GraphQLResolveInfo, draft_id: int) -> dic
|
||||
session.add(sa)
|
||||
|
||||
# Добавляем темы
|
||||
for topic in draft.topics or []:
|
||||
st = ShoutTopic(topic=topic.id, shout=shout.id, main=topic.main if hasattr(topic, "main") else False)
|
||||
topics_list = draft.topics or []
|
||||
if not topics_list:
|
||||
logger.error(f"Cannot publish draft {draft_id}: no topics assigned")
|
||||
return {"error": "Cannot publish draft: at least one topic is required"}
|
||||
|
||||
# 🔍 Проверяем наличие главного топика
|
||||
has_main_topic = any(getattr(topic, "main", False) for topic in topics_list)
|
||||
|
||||
for i, topic in enumerate(topics_list):
|
||||
# 🩵 Если нет главного топика, делаем первый топик главным
|
||||
is_main = getattr(topic, "main", False) or (not has_main_topic and i == 0)
|
||||
st = ShoutTopic(topic=topic.id, shout=shout.id, main=is_main)
|
||||
session.add(st)
|
||||
|
||||
if is_main:
|
||||
logger.info(f"Set topic {topic.id} as main topic for shout {shout.id}")
|
||||
|
||||
# Обновляем черновик ссылкой на опубликованную публикацию
|
||||
draft.shout = shout.id
|
||||
|
||||
|
||||
Reference in New Issue
Block a user