### 📦 Added - **Автоматическое определение главного топика**: Система автоматически назначает главный топик при публикации - **Валидация топиков при публикации**: Проверка наличия хотя бы одного топика перед публикацией ### 🏗️ Changed - **Исправлена логика публикации черновиков**: Теперь автоматически устанавливается главный топик при отсутствии - **Обновлена логика создания статей**: Гарантируется наличие главного топика во всех публикациях ### 🐛 Fixed - **Исправлена критическая ошибка с публикацией статей**: Статьи теперь корректно появляются в фидах после публикации - **Гарантирован главный топик**: Все опубликованные статьи теперь обязательно имеют главный топик (`main=True`)
This commit is contained in:
@@ -230,14 +230,23 @@ async def create_shout(_: None, info: GraphQLResolveInfo, inp: dict) -> dict:
|
||||
try:
|
||||
logger.debug(f"Linking topics: {[t.slug for t in input_topics]}")
|
||||
main_topic = inp.get("main_topic")
|
||||
for topic in input_topics:
|
||||
|
||||
# 🔍 Проверяем наличие главного топика
|
||||
has_main_topic = bool(main_topic and any(t.slug == main_topic for t in input_topics))
|
||||
|
||||
for i, topic in enumerate(input_topics):
|
||||
# 🩵 Если нет главного топика, делаем первый топик главным
|
||||
is_main = (topic.slug == main_topic) if main_topic else (not has_main_topic and i == 0)
|
||||
st = ShoutTopic(
|
||||
topic=topic.id,
|
||||
shout=new_shout.id,
|
||||
main=(topic.slug == main_topic) if main_topic else False,
|
||||
main=is_main,
|
||||
)
|
||||
session.add(st)
|
||||
logger.debug(f"Added topic {topic.slug} {'(main)' if st.main else ''}")
|
||||
|
||||
if is_main:
|
||||
logger.info(f"Set topic {topic.id} as main topic for shout {new_shout.id}")
|
||||
except Exception as e:
|
||||
logger.error(f"Error linking topics: {e}", exc_info=True)
|
||||
return {"error": f"Error linking topics: {e!s}"}
|
||||
|
||||
Reference in New Issue
Block a user