0.5.8-panel-upgrade-community-crud-fix
All checks were successful
Deploy on push / deploy (push) Successful in 6s

This commit is contained in:
2025-06-30 21:25:26 +03:00
parent 9de86c0fae
commit 952b294345
70 changed files with 11345 additions and 2655 deletions

View File

@@ -62,11 +62,11 @@ async def admin_get_users(
current_page = (offset // per_page) + 1 if per_page > 0 else 1
# Применяем пагинацию
users = query.order_by(Author.id).offset(offset).limit(limit).all()
authors = query.order_by(Author.id).offset(offset).limit(limit).all()
# Преобразуем в формат для API
return {
"users": [
"authors": [
{
"id": user.id,
"email": user.email,
@@ -76,7 +76,7 @@ async def admin_get_users(
"created_at": user.created_at,
"last_seen": user.last_seen,
}
for user in users
for user in authors
],
"total": total_count,
"page": current_page,
@@ -247,11 +247,11 @@ async def update_env_variables(_: None, info: GraphQLResolveInfo, variables: lis
@admin_auth_required
async def admin_update_user(_: None, info: GraphQLResolveInfo, user: dict[str, Any]) -> dict[str, Any]:
"""
Обновляет роли пользователя
Обновляет данные пользователя (роли, email, имя, slug)
Args:
info: Контекст GraphQL запроса
user: Данные для обновления пользователя (содержит id и roles)
user: Данные для обновления пользователя
Returns:
Boolean: результат операции или объект с ошибкой
@@ -259,6 +259,9 @@ async def admin_update_user(_: None, info: GraphQLResolveInfo, user: dict[str, A
try:
user_id = user.get("id")
roles = user.get("roles", [])
email = user.get("email")
name = user.get("name")
slug = user.get("slug")
if not roles:
logger.warning(f"Пользователю {user_id} не назначено ни одной роли. Доступ в систему будет заблокирован.")
@@ -272,6 +275,28 @@ async def admin_update_user(_: None, info: GraphQLResolveInfo, user: dict[str, A
logger.error(error_msg)
return {"success": False, "error": error_msg}
# Обновляем основные поля профиля
profile_updated = False
if email is not None and email != author.email:
# Проверяем уникальность email
existing_author = session.query(Author).filter(Author.email == email, Author.id != user_id).first()
if existing_author:
return {"success": False, "error": f"Email {email} уже используется другим пользователем"}
author.email = email
profile_updated = True
if name is not None and name != author.name:
author.name = name
profile_updated = True
if slug is not None and slug != author.slug:
# Проверяем уникальность slug
existing_author = session.query(Author).filter(Author.slug == slug, Author.id != user_id).first()
if existing_author:
return {"success": False, "error": f"Slug {slug} уже используется другим пользователем"}
author.slug = slug
profile_updated = True
# Получаем ID сообщества по умолчанию
default_community_id = 1 # Используем значение по умолчанию из модели AuthorRole
@@ -307,19 +332,25 @@ async def admin_update_user(_: None, info: GraphQLResolveInfo, user: dict[str, A
f"Пользователю {author.email or author.id} не назначена роль 'reader'. Доступ в систему будет ограничен."
)
logger.info(f"Роли пользователя {author.email or author.id} обновлены: {', '.join(found_role_ids)}")
update_details = []
if profile_updated:
update_details.append("профиль")
if roles:
update_details.append(f"роли: {', '.join(found_role_ids)}")
logger.info(f"Данные пользователя {author.email or author.id} обновлены: {', '.join(update_details)}")
return {"success": True}
except Exception as e:
# Обработка вложенных исключений
session.rollback()
error_msg = f"Ошибка при изменении ролей: {e!s}"
error_msg = f"Ошибка при изменении данных пользователя: {e!s}"
logger.error(error_msg)
return {"success": False, "error": error_msg}
except Exception as e:
import traceback
error_msg = f"Ошибка при обновлении ролей пользователя: {e!s}"
error_msg = f"Ошибка при обновлении данных пользователя: {e!s}"
logger.error(error_msg)
logger.error(traceback.format_exc())
return {"success": False, "error": error_msg}