invites-fix3
This commit is contained in:
parent
6c95b0575a
commit
5f48ec465a
|
@ -5,6 +5,8 @@
|
||||||
### auth/internal fix
|
### auth/internal fix
|
||||||
- Исправлена ошибка в функции `authenticate` в файле `auth/internal.py` - неправильное создание объекта `AuthState` и использование `TokenManager` вместо прямого создания `SessionTokenManager`
|
- Исправлена ошибка в функции `authenticate` в файле `auth/internal.py` - неправильное создание объекта `AuthState` и использование `TokenManager` вместо прямого создания `SessionTokenManager`
|
||||||
- Исправлена ошибка в функции `admin_get_invites` в файле `resolvers/admin.py` - добавлено значение по умолчанию для поля `slug` в объектах `Author`, чтобы избежать ошибки "Cannot return null for non-nullable field Author.slug"
|
- Исправлена ошибка в функции `admin_get_invites` в файле `resolvers/admin.py` - добавлено значение по умолчанию для поля `slug` в объектах `Author`, чтобы избежать ошибки "Cannot return null for non-nullable field Author.slug"
|
||||||
|
- Исправлена ошибка в функции `admin_get_invites` - заменен несуществующий атрибут `Shout.created_by_author` на правильное получение автора через поле `created_by`
|
||||||
|
- Исправлена функция `admin_delete_invites_batch` - завершена реализация для корректной обработки пакетного удаления приглашений
|
||||||
|
|
||||||
### Улучшения админ-панели для приглашений
|
### Улучшения админ-панели для приглашений
|
||||||
|
|
||||||
|
|
|
@ -715,7 +715,7 @@ async def admin_get_invites(
|
||||||
query = session.query(Invite).options(
|
query = session.query(Invite).options(
|
||||||
joinedload(Invite.inviter),
|
joinedload(Invite.inviter),
|
||||||
joinedload(Invite.author),
|
joinedload(Invite.author),
|
||||||
joinedload(Invite.shout).joinedload(Shout.created_by_author),
|
joinedload(Invite.shout),
|
||||||
)
|
)
|
||||||
|
|
||||||
# Фильтр по статусу
|
# Фильтр по статусу
|
||||||
|
@ -769,9 +769,14 @@ async def admin_get_invites(
|
||||||
)
|
)
|
||||||
|
|
||||||
# Преобразуем в формат для API
|
# Преобразуем в формат для API
|
||||||
return {
|
result_invites = []
|
||||||
"invites": [
|
for invite in invites:
|
||||||
{
|
# Получаем автора публикации
|
||||||
|
created_by_author = None
|
||||||
|
if invite.shout and invite.shout.created_by:
|
||||||
|
created_by_author = session.query(Author).filter(Author.id == invite.shout.created_by).first()
|
||||||
|
|
||||||
|
invite_dict = {
|
||||||
"inviter_id": invite.inviter_id,
|
"inviter_id": invite.inviter_id,
|
||||||
"author_id": invite.author_id,
|
"author_id": invite.author_id,
|
||||||
"shout_id": invite.shout_id,
|
"shout_id": invite.shout_id,
|
||||||
|
@ -780,8 +785,7 @@ async def admin_get_invites(
|
||||||
"id": invite.inviter.id,
|
"id": invite.inviter.id,
|
||||||
"name": invite.inviter.name or "Без имени",
|
"name": invite.inviter.name or "Без имени",
|
||||||
"email": invite.inviter.email,
|
"email": invite.inviter.email,
|
||||||
"slug": invite.inviter.slug
|
"slug": invite.inviter.slug or f"user-{invite.inviter.id}", # Добавляем значение по умолчанию
|
||||||
or f"user-{invite.inviter.id}", # Добавляем значение по умолчанию
|
|
||||||
},
|
},
|
||||||
"author": {
|
"author": {
|
||||||
"id": invite.author.id,
|
"id": invite.author.id,
|
||||||
|
@ -793,18 +797,25 @@ async def admin_get_invites(
|
||||||
"id": invite.shout.id,
|
"id": invite.shout.id,
|
||||||
"title": invite.shout.title,
|
"title": invite.shout.title,
|
||||||
"slug": invite.shout.slug,
|
"slug": invite.shout.slug,
|
||||||
"created_by": {
|
|
||||||
"id": invite.shout.created_by_author.id,
|
|
||||||
"name": invite.shout.created_by_author.name or "Без имени",
|
|
||||||
"email": invite.shout.created_by_author.email,
|
|
||||||
"slug": invite.shout.created_by_author.slug
|
|
||||||
or f"user-{invite.shout.created_by_author.id}", # Добавляем значение по умолчанию
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
"created_at": None, # У приглашений нет created_at поля в текущей модели
|
"created_at": None, # У приглашений нет created_at поля в текущей модели
|
||||||
}
|
}
|
||||||
for invite in invites
|
|
||||||
],
|
# Добавляем информацию о создателе публикации, если она доступна
|
||||||
|
if created_by_author:
|
||||||
|
invite_dict["shout"]["created_by"] = {
|
||||||
|
"id": created_by_author.id,
|
||||||
|
"name": created_by_author.name or "Без имени",
|
||||||
|
"email": created_by_author.email,
|
||||||
|
"slug": created_by_author.slug or f"user-{created_by_author.id}",
|
||||||
|
}
|
||||||
|
else:
|
||||||
|
invite_dict["shout"]["created_by"] = None
|
||||||
|
|
||||||
|
result_invites.append(invite_dict)
|
||||||
|
|
||||||
|
return {
|
||||||
|
"invites": result_invites,
|
||||||
"total": total_count,
|
"total": total_count,
|
||||||
"page": current_page,
|
"page": current_page,
|
||||||
"perPage": per_page,
|
"perPage": per_page,
|
||||||
|
@ -1028,11 +1039,7 @@ async def admin_delete_invites_batch(
|
||||||
# Находим приглашение для удаления
|
# Находим приглашение для удаления
|
||||||
invite = (
|
invite = (
|
||||||
session.query(Invite)
|
session.query(Invite)
|
||||||
.filter(
|
.filter(Invite.inviter_id == inviter_id, Invite.author_id == author_id, Invite.shout_id == shout_id)
|
||||||
Invite.inviter_id == inviter_id,
|
|
||||||
Invite.author_id == author_id,
|
|
||||||
Invite.shout_id == shout_id,
|
|
||||||
)
|
|
||||||
.first()
|
.first()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -1047,15 +1054,16 @@ async def admin_delete_invites_batch(
|
||||||
# Сохраняем все изменения за раз
|
# Сохраняем все изменения за раз
|
||||||
if deleted_count > 0:
|
if deleted_count > 0:
|
||||||
session.commit()
|
session.commit()
|
||||||
logger.info(f"Пакетное удаление: удалено {deleted_count} приглашений")
|
logger.info(f"Пакетное удаление приглашений: удалено {deleted_count} приглашений")
|
||||||
|
|
||||||
|
# Формируем результат
|
||||||
|
result = {"success": True, "error": None}
|
||||||
if errors:
|
if errors:
|
||||||
error_message = f"Удалено {deleted_count} из {len(invites)} приглашений. Ошибки: {', '.join(errors)}"
|
result["error"] = f"Удалено {deleted_count} приглашений. Ошибки: {', '.join(errors)}"
|
||||||
return {"success": deleted_count > 0, "error": error_message}
|
|
||||||
|
|
||||||
return {"success": True, "error": None}
|
return result
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Ошибка при пакетном удалении приглашений: {e!s}")
|
logger.error(f"Ошибка при пакетном удалении приглашений: {e!s}")
|
||||||
msg = f"Не удалось удалить приглашения: {e!s}"
|
msg = f"Не удалось выполнить пакетное удаление приглашений: {e!s}"
|
||||||
raise GraphQLError(msg) from e
|
raise GraphQLError(msg) from e
|
||||||
|
|
Loading…
Reference in New Issue
Block a user