Исправлена админ-панель: работа с бд теперь доступна (нужно добавить кнопки), добавлены кнопки 'Открыть сессию пользователя' - для того чтобы администратор мог открыть игру, не выходя из админ-панели, создав при этом дополнительное окно, и 'Выйти'(бургер-меню) - закрыть приложение. Исправлен процесс регистрации: при регистрации пользователя данные из таблицы Auth автоматически переносятся в таблицу Users и GameSession для дальнейшего просмотра, редактирования, удаления данных в админ-панели, добавлен параметр username для корректрой работы базы данных и процесса регистрации, исправлен интерфейс: добавлены наименования полей, для удобства пользователя. Изменения в коде: работа с бд перенесена в файл с интерфейсом админ-панели, потому что Python по-другому не воспринимает мои страдания((( Изменения в логировании: при запуске игры создаётся/обновляется файл game.log (импортировать в админ-панель, также как и logfile.log).

This commit is contained in:
Xatiko 2024-11-28 17:17:19 +03:00
parent 0e42442310
commit 815f432536
22 changed files with 2180 additions and 2724 deletions

View file

@ -4,31 +4,68 @@ from database.db_session import get_session
from database.models import Auth, Notifications, Users, GameSession, Dogs, Questions
from sqlalchemy.exc import SQLAlchemyError
def create_user(login, password, username):
"""Создание нового пользователя в базе данных."""
def get_user_by_id(user_id):
"""Получение данных пользователя по ID."""
session = get_session()
try:
new_user_auth = Auth(login=login, password=password)
session.add(new_user_auth)
session.commit()
new_user = Users(username=username, auth=new_user_auth)
session.add(new_user)
session.commit()
user = session.query(Users).filter_by(user_id=user_id).first()
return user
except SQLAlchemyError as e:
print(f"Ошибка при создании пользователя: {e}")
session.rollback()
print(f"Ошибка при получении пользователя: {e}")
return None
finally:
session.close()
def check_user(login, password):
"""Проверка данных пользователя для авторизации."""
def create_user(login, password, username):
"""Создание нового пользователя в базе данных."""
session = get_session()
# Проверяем, есть ли уже пользователь с таким логином
if session.query(Auth).filter_by(login=login).first():
return False, "Логин уже используется."
# Создаем новую запись в таблице Auth
new_auth = Auth(login=login, password=password)
session.add(new_auth)
try:
session.commit() # Сохраняем изменения в таблице Auth
# Создаем новую запись в таблице Users, связывая с только что добавленным Auth
new_user = Users(user_id=new_auth.user_id, username=username)
session.add(new_user)
session.commit() # Сохраняем изменения в таблице Users
except SQLAlchemyError as e:
session.rollback() # Откат изменений при ошибке
print(f"Ошибка при создании пользователя: {e}")
return False, "Произошла ошибка при регистрации."
finally:
session.close()
return True, "Регистрация успешна."
def check_user(login, password=None):
"""Проверка существования пользователя по логину и паролю (если передан)."""
session = get_session()
try:
user = session.query(Auth).filter_by(login=login, password=password).first()
print(f"Проверяем пользователя с логином: {login}")
# Фильтрация только по логину
query = session.query(Auth).filter_by(login=login)
# Если передан пароль, фильтруем и по паролю
if password:
query = query.filter_by(password=password)
user = query.first()
if user:
return user.user_id # Получаем user_id из Auth
return None
print(f"Пользователь найден: {user.user_id}")
return user.user_id # Возвращаем user_id пользователя
else:
print("Пользователь не найден.")
return None
except SQLAlchemyError as e:
print(f"Ошибка при проверке пользователя: {e}")
return None
@ -36,7 +73,7 @@ def check_user(login, password):
session.close()
def save_progress(user_id, level, score, duration, health, hunger, sleepiness):
"""Сохраняет прогресс пользователя в базу данных."""
"""Сохранение игрового прогресса в базу данных."""
session = get_session()
try:
session_data = GameSession(
@ -134,3 +171,149 @@ def update_user_dog(user_id, dog_id):
session.rollback()
finally:
session.close()
def debug_list_users():
"""Отладочный вывод всех пользователей."""
session = get_session()
try:
users = session.query(Auth).all()
for user in users:
print(f"User ID: {user.user_id}, Login: {user.login}, Password: {user.password}")
except SQLAlchemyError as e:
print(f"Ошибка при получении списка пользователей: {e}")
finally:
session.close()
def get_all_users():
"""Получить всех пользователей с предварительной загрузкой данных."""
session = get_session()
try:
users = session.query(Users).options(joinedload(Users.auth)).all()
return users
except SQLAlchemyError as e:
print(f"Ошибка при получении пользователей: {e}")
return [] # Возвращаем пустой список, если ошибка
finally:
session.close()
def get_all_questions():
"""Получить все вопросы."""
session = get_session()
try:
questions = session.query(Questions).all()
return questions
except SQLAlchemyError as e:
print(f"Ошибка при получении вопросов: {e}")
return []
finally:
session.close()
def get_all_dogs():
"""Получить все записи о собаках."""
session = get_session()
try:
dogs = session.query(Dogs).all()
return dogs
except SQLAlchemyError as e:
print(f"Ошибка при получении собак: {e}")
return []
finally:
session.close()
def get_user_by_username(username):
"""Получить пользователя по логину."""
session = get_session()
try:
user = session.query(Users).join(Auth).filter(Auth.login == username).first()
return user
except SQLAlchemyError as e:
print(f"Ошибка при получении пользователя: {e}")
return None
finally:
session.close()
def update_user(user_id, new_login, new_password):
"""Обновить данные пользователя."""
session = get_session()
try:
user = session.query(Users).filter_by(user_id=user_id).first()
if user:
auth = user.auth
auth.login = new_login
auth.password = new_password
session.commit()
except SQLAlchemyError as e:
print(f"Ошибка при обновлении пользователя: {e}")
session.rollback()
finally:
session.close()
def update_user_info(user_id, new_login, new_username):
"""Обновление данных пользователя."""
session = get_session()
try:
user = session.query(Users).filter_by(user_id=user_id).first()
if user:
user.auth.login = new_login
user.username = new_username
session.commit()
return True, "Данные пользователя обновлены."
return False, "Пользователь не найден."
except SQLAlchemyError as e:
session.rollback()
return False, f"Ошибка при обновлении: {e}"
finally:
session.close()
def delete_user(user_id):
"""Удаление пользователя."""
session = get_session()
try:
user = session.query(Users).filter_by(user_id=user_id).first()
if user:
session.delete(user.auth)
session.commit()
return True, "Пользователь удалён."
return False, "Пользователь не найден."
except SQLAlchemyError as e:
session.rollback()
return False, f"Ошибка при удалении: {e}"
finally:
session.close()
def update_dog_info(dog_id, breed, characteristics):
"""Обновление информации о собаке."""
session = get_session()
try:
dog = session.query(Dogs).filter_by(dog_id=dog_id).first()
if dog:
dog.breed = breed
dog.characteristics = characteristics
session.commit()
return True, "Информация о собаке обновлена."
return False, "Собака не найдена."
except SQLAlchemyError as e:
session.rollback()
return False, f"Ошибка при обновлении: {e}"
finally:
session.close()
def update_question(question_id, text, helpful_info):
"""Обновление вопроса."""
session = get_session()
try:
question = session.query(Questions).filter_by(question_id=question_id).first()
if question:
question.question_text = text
question.helpful_info = helpful_info
session.commit()
return True, "Вопрос обновлён."
return False, "Вопрос не найден."
except SQLAlchemyError as e:
session.rollback()
return False, f"Ошибка при обновлении: {e}"
finally:
session.close()