This commit is contained in:
@@ -58,7 +58,6 @@ def create_shout_from_draft(session: Session | None, draft: Draft, author_id: in
|
||||
seo=draft.seo,
|
||||
created_by=author_id,
|
||||
community=draft.community,
|
||||
draft=draft.id,
|
||||
deleted_at=None,
|
||||
)
|
||||
|
||||
@@ -431,29 +430,30 @@ async def publish_draft(_: None, info: GraphQLResolveInfo, draft_id: int) -> dic
|
||||
|
||||
# Проверяем, есть ли уже публикация для этого черновика
|
||||
shout = None
|
||||
if hasattr(draft, "publication") and draft.publication:
|
||||
shout = draft.publication
|
||||
# Обновляем существующую публикацию
|
||||
if hasattr(draft, "body"):
|
||||
shout.body = draft.body
|
||||
if hasattr(draft, "title"):
|
||||
shout.title = draft.title
|
||||
if hasattr(draft, "subtitle"):
|
||||
shout.subtitle = draft.subtitle
|
||||
if hasattr(draft, "lead"):
|
||||
shout.lead = draft.lead
|
||||
if hasattr(draft, "cover"):
|
||||
shout.cover = draft.cover
|
||||
if hasattr(draft, "cover_caption"):
|
||||
shout.cover_caption = draft.cover_caption
|
||||
if hasattr(draft, "media"):
|
||||
shout.media = draft.media
|
||||
if hasattr(draft, "lang"):
|
||||
shout.lang = draft.lang
|
||||
if hasattr(draft, "seo"):
|
||||
shout.seo = draft.seo
|
||||
shout.updated_at = int(time.time())
|
||||
shout.updated_by = author_id
|
||||
if draft.shout:
|
||||
shout = session.query(Shout).where(Shout.id == draft.shout).first()
|
||||
if shout:
|
||||
# Обновляем существующую публикацию
|
||||
if hasattr(draft, "body"):
|
||||
shout.body = draft.body
|
||||
if hasattr(draft, "title"):
|
||||
shout.title = draft.title
|
||||
if hasattr(draft, "subtitle"):
|
||||
shout.subtitle = draft.subtitle
|
||||
if hasattr(draft, "lead"):
|
||||
shout.lead = draft.lead
|
||||
if hasattr(draft, "cover"):
|
||||
shout.cover = draft.cover
|
||||
if hasattr(draft, "cover_caption"):
|
||||
shout.cover_caption = draft.cover_caption
|
||||
if hasattr(draft, "media"):
|
||||
shout.media = draft.media
|
||||
if hasattr(draft, "lang"):
|
||||
shout.lang = draft.lang
|
||||
if hasattr(draft, "seo"):
|
||||
shout.seo = draft.seo
|
||||
shout.updated_at = int(time.time())
|
||||
shout.updated_by = author_id
|
||||
else:
|
||||
# Создаем новую публикацию
|
||||
shout = create_shout_from_draft(session, draft, author_id)
|
||||
@@ -477,6 +477,9 @@ async def publish_draft(_: None, info: GraphQLResolveInfo, draft_id: int) -> dic
|
||||
st = ShoutTopic(topic=topic.id, shout=shout.id, main=topic.main if hasattr(topic, "main") else False)
|
||||
session.add(st)
|
||||
|
||||
# Обновляем черновик ссылкой на опубликованную публикацию
|
||||
draft.shout = shout.id
|
||||
|
||||
session.commit()
|
||||
|
||||
# Инвалидируем кеш
|
||||
@@ -535,16 +538,22 @@ async def unpublish_draft(_: None, info: GraphQLResolveInfo, draft_id: int) -> d
|
||||
|
||||
# Проверяем, есть ли публикация
|
||||
shout = None
|
||||
if hasattr(draft, "publication") and draft.publication:
|
||||
shout = draft.publication
|
||||
if draft.shout:
|
||||
shout = session.query(Shout).where(Shout.id == draft.shout).first()
|
||||
else:
|
||||
return {"error": "This draft is not published yet"}
|
||||
|
||||
if not shout:
|
||||
return {"error": "Published shout not found"}
|
||||
|
||||
# Снимаем с публикации
|
||||
shout.published_at = None
|
||||
shout.updated_at = int(time.time())
|
||||
shout.updated_by = author_id
|
||||
|
||||
# Очищаем ссылку на публикацию в черновике
|
||||
draft.shout = None
|
||||
|
||||
session.commit()
|
||||
|
||||
# Инвалидируем кэш
|
||||
@@ -555,7 +564,7 @@ async def unpublish_draft(_: None, info: GraphQLResolveInfo, draft_id: int) -> d
|
||||
# Формируем результат
|
||||
draft_dict = draft.dict()
|
||||
# Добавляем информацию о публикации
|
||||
draft_dict["publication"] = {"id": shout.id, "slug": shout.slug, "published_at": None}
|
||||
draft_dict["shout"] = {"id": shout.id, "slug": shout.slug, "published_at": None}
|
||||
|
||||
logger.info(f"Successfully unpublished shout #{shout.id} for draft #{draft_id}")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user