This commit is contained in:
parent
af7fbd2fc9
commit
6d9513f1b2
|
@ -64,21 +64,32 @@ async def load_drafts(_, info):
|
||||||
if not user_id or not author_id:
|
if not user_id or not author_id:
|
||||||
return {"error": "User ID and author ID are required"}
|
return {"error": "User ID and author ID are required"}
|
||||||
|
|
||||||
with local_session() as session:
|
try:
|
||||||
# Предзагружаем authors и topics, т.к. они lazy='select' в модели
|
with local_session() as session:
|
||||||
# created_by, updated_by, deleted_by загрузятся автоматически (lazy='joined')
|
# Предзагружаем authors и topics
|
||||||
drafts = (
|
drafts = (
|
||||||
session.query(Draft)
|
session.query(Draft)
|
||||||
.options(
|
.options(
|
||||||
joinedload(Draft.topics),
|
joinedload(Draft.topics),
|
||||||
joinedload(Draft.authors)
|
joinedload(Draft.authors)
|
||||||
|
)
|
||||||
|
# Фильтруем по ID автора (создатель или соавтор)
|
||||||
|
.filter(or_(Draft.authors.any(Author.id == author_id), Draft.created_by == author_id))
|
||||||
|
.all()
|
||||||
)
|
)
|
||||||
# Фильтруем по ID автора (создатель или соавтор)
|
|
||||||
.filter(or_(Draft.authors.any(Author.id == author_id), Draft.created_by == author_id))
|
|
||||||
.all()
|
|
||||||
)
|
|
||||||
|
|
||||||
return {"drafts": drafts}
|
# Преобразуем объекты в словари, пока они в контексте сессии
|
||||||
|
drafts_data = []
|
||||||
|
for draft in drafts:
|
||||||
|
draft_dict = draft.dict()
|
||||||
|
draft_dict["topics"] = [topic.dict() for topic in draft.topics]
|
||||||
|
draft_dict["authors"] = [author.dict() for author in draft.authors]
|
||||||
|
drafts_data.append(draft_dict)
|
||||||
|
|
||||||
|
return {"drafts": drafts_data}
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Failed to load drafts: {e}", exc_info=True)
|
||||||
|
return {"error": f"Failed to load drafts: {str(e)}"}
|
||||||
|
|
||||||
|
|
||||||
@mutation.field("create_draft")
|
@mutation.field("create_draft")
|
||||||
|
@ -272,17 +283,17 @@ async def publish_draft(_, info, draft_id: int):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
with local_session() as session:
|
with local_session() as session:
|
||||||
shout_id = session.query(Draft.shout).filter(Draft.id == draft_id).first()
|
# Сначала находим черновик
|
||||||
shout = session.query(Shout).filter(Shout.id == shout_id).first()
|
draft = session.query(Draft).filter(Draft.id == draft_id).first()
|
||||||
if not shout:
|
|
||||||
return {"error": "Shout not found"}
|
|
||||||
was_published = shout.published_at is not None
|
|
||||||
draft = session.query(Draft).where(Draft.id == shout.draft).first()
|
|
||||||
if not draft:
|
if not draft:
|
||||||
return {"error": "Draft not found"}
|
return {"error": "Draft not found"}
|
||||||
# Находим черновик если не передан
|
|
||||||
|
# Ищем существующий shout для этого черновика
|
||||||
|
shout = session.query(Shout).filter(Shout.draft == draft_id).first()
|
||||||
|
was_published = shout.published_at if shout else None
|
||||||
|
|
||||||
if not shout:
|
if not shout:
|
||||||
|
# Создаем новый shout если не существует
|
||||||
shout = create_shout_from_draft(session, draft, author_id)
|
shout = create_shout_from_draft(session, draft, author_id)
|
||||||
else:
|
else:
|
||||||
# Обновляем существующую публикацию
|
# Обновляем существующую публикацию
|
||||||
|
|
Loading…
Reference in New Issue
Block a user