Commit 566bdaca authored by “Mikkelando”'s avatar “Mikkelando”
Browse files

final

parent 2a5c8aad
No related merge requests found
Showing with 112 additions and 21 deletions
+112 -21
...@@ -30,7 +30,7 @@ urlpatterns = [ ...@@ -30,7 +30,7 @@ urlpatterns = [
path('story-and-files', views.view_story_and_files, name='view_story_and_files'), path('story-and-files', views.view_story_and_files, name='view_story_and_files'),
path('redactor/', views.redactor, name='redactor'), path('redactor/', views.redactor, name='redactor'),
path('api/orders/by-username/<str:username>/', views.order_list_by_username_api, name='order_list_by_username_api'), path('api/orders/by-username/<str:username>/', views.order_list_by_username_api, name='order_list_by_username_api'),
path('api/users/<str:username>/', views.check_user_exists, name='check_user_exists'),
# path('serve-file/<str:file_name>/', views.serve_file, name='serve_file'), # path('serve-file/<str:file_name>/', views.serve_file, name='serve_file'),
# re_path(r'^download-file/(?P<path>.*)$', views.download_file, name='download_file'), # re_path(r'^download-file/(?P<path>.*)$', views.download_file, name='download_file'),
......
...@@ -635,4 +635,24 @@ def view_editrequests(request): ...@@ -635,4 +635,24 @@ def view_editrequests(request):
print('from views: ', nn_status) print('from views: ', nn_status)
return render(request, 'mainapp/view_editrequests.html', {'orders_status_list': orders_status_list, 'nn_status': nn_status}) return render(request, 'mainapp/view_editrequests.html', {'orders_status_list': orders_status_list, 'nn_status': nn_status})
\ No newline at end of file
@csrf_exempt
def check_user_exists(request, username):
# Проверка ключа API
api_key = request.headers.get('Authorization')
if api_key != f"Api-Key {settings.API_KEY}":
return JsonResponse({'error': 'Unauthorized'}, status=403)
if request.method == 'GET':
# Проверка существует ли пользователь с таким именем
try:
user = User.objects.get(username=username)
return JsonResponse({'exists': True})
except User.DoesNotExist:
return JsonResponse({'exists': False})
return JsonResponse({'error': 'Method not allowed'}, status=405)
...@@ -139,7 +139,37 @@ def mark_order_as_processed(order_id): ...@@ -139,7 +139,37 @@ def mark_order_as_processed(order_id):
return set_order_status(order_id=order_id, status=STATUS_FINISHED) return set_order_status(order_id=order_id, status=STATUS_FINISHED)
def is_login_exists_in_db(username):
"""
Проверяет существование пользователя в базе данных по имени пользователя.
Аргументы:
username (str): Имя пользователя, наличие которого необходимо проверить в базе данных.
Возвращает:
bool: Возвращает True, если пользователь существует в базе данных, иначе False.
Исключения:
Обрабатывает любое исключение requests, связанное с HTTP-запросом, такое как проблемы соединения
или некорректный HTTP-ответ. В случае ошибки возвращает False и выводит сообщение об ошибке в консоль.
"""
try:
response = requests.get(f"{BASE_URL}{USERNAME_CHECK_ENDPOINT}{username}/", headers=HEADERS)
response.raise_for_status()
user_data = response.json()
return user_data.get('exists', False)
except requests.exceptions.RequestException as e:
print(f"Ошибка при проверке логина в базе данных: {e}")
return False
if __name__ == "__main__": if __name__ == "__main__":
data = get_order_statuses_with_ids('red') data = get_order_statuses_with_ids('red')
print(data) print(data)
print('LOGIN: ', is_login_exists_in_db('lksdjf'))
print('LOGIN: ', is_login_exists_in_db('red'))
...@@ -7,8 +7,16 @@ from aiogram.types import CallbackQuery ...@@ -7,8 +7,16 @@ from aiogram.types import CallbackQuery
from aiogram.utils.keyboard import InlineKeyboardBuilder from aiogram.utils.keyboard import InlineKeyboardBuilder
from aiogram.fsm.state import State, StatesGroup from aiogram.fsm.state import State, StatesGroup
from test.api_test import get_order_statuses_with_ids # Импорт функции для получения заказов # from test.api_test import get_order_statuses_with_ids # Импорт функции для получения заказов
# from test.api_test import is_login_exists_in_db
# from test.config import token
from api_test import get_order_statuses_with_ids # Импорт функции для получения заказов
from api_test import is_login_exists_in_db
from config import token from config import token
# Устанавливаем уровень логирования # Устанавливаем уровень логирования
logging.basicConfig(level=logging.INFO) logging.basicConfig(level=logging.INFO)
...@@ -43,11 +51,11 @@ async def send_welcome(message: types.Message, state: FSMContext): ...@@ -43,11 +51,11 @@ async def send_welcome(message: types.Message, state: FSMContext):
# Создаем инлайн-кнопки "Старт", "Вход" и "Регистрация" # Создаем инлайн-кнопки "Старт", "Вход" и "Регистрация"
builder = InlineKeyboardBuilder() builder = InlineKeyboardBuilder()
builder.add(types.InlineKeyboardButton(text="Старт", callback_data="start")) builder.add(types.InlineKeyboardButton(text="Старт", callback_data="start"))
builder.add(types.InlineKeyboardButton(text="Вход", callback_data="login")) builder.add(types.InlineKeyboardButton(text="Вход🔐", callback_data="login"))
builder.add(types.InlineKeyboardButton(text="Регистрация", url="https://lms.hse.ru/")) builder.add(types.InlineKeyboardButton(text="Регистрация", url="https://moverelab.ru/"))
await message.answer("Привет! Выберите действие:", reply_markup=builder.as_markup()) await message.answer("Привет👋", reply_markup=builder.as_markup())
# Удаление всех сообщений до /start # Удаление всех сообщений до /start
async def delete_messages_up_to_start(chat_id: int, current_message_id: int): async def delete_messages_up_to_start(chat_id: int, current_message_id: int):
...@@ -66,7 +74,7 @@ async def delete_messages_up_to_start(chat_id: int, current_message_id: int): ...@@ -66,7 +74,7 @@ async def delete_messages_up_to_start(chat_id: int, current_message_id: int):
async def send_about(call: CallbackQuery): async def send_about(call: CallbackQuery):
await delete_messages_up_to_start(call.message.chat.id, call.message.message_id) await delete_messages_up_to_start(call.message.chat.id, call.message.message_id)
builder = InlineKeyboardBuilder() builder = InlineKeyboardBuilder()
builder.add(types.InlineKeyboardButton(text="Назад", callback_data="main_menu")) builder.add(types.InlineKeyboardButton(text="Назад🔙", callback_data="main_menu"))
await call.message.answer("Этот бот был создан студентами для лаборатории МИЭМ.", reply_markup=builder.as_markup()) await call.message.answer("Этот бот был создан студентами для лаборатории МИЭМ.", reply_markup=builder.as_markup())
# Обработчик нажатия на "Вход" # Обработчик нажатия на "Вход"
...@@ -75,29 +83,45 @@ async def ask_for_login(call: CallbackQuery, state: FSMContext): ...@@ -75,29 +83,45 @@ async def ask_for_login(call: CallbackQuery, state: FSMContext):
await delete_messages_up_to_start(call.message.chat.id, call.message.message_id) await delete_messages_up_to_start(call.message.chat.id, call.message.message_id)
builder = InlineKeyboardBuilder() builder = InlineKeyboardBuilder()
builder.add(types.InlineKeyboardButton(text="Назад", callback_data="main_menu")) builder.add(types.InlineKeyboardButton(text="Назад🔙", callback_data="main_menu"))
await call.message.answer("Введите ваш логин:", reply_markup=builder.as_markup()) await call.message.answer("Введите ваш логин:", reply_markup=builder.as_markup())
await state.set_state(AuthStates.waiting_for_login) await state.set_state(AuthStates.waiting_for_login)
# Обработка ввода логина # Обработка ввода логина
@router.message(AuthStates.waiting_for_login) @router.message(AuthStates.waiting_for_login)
async def get_login(message: types.Message, state: FSMContext): async def get_login(message: types.Message, state: FSMContext):
await delete_messages_up_to_start(message.chat.id, message.message_id) await delete_messages_up_to_start(message.chat.id, message.message_id)
# Сохраняем логин в словарь авторизованных пользователей
chat_id = message.chat.id chat_id = message.chat.id
login = message.text login = message.text
auth_users[chat_id] = login
# Проверяем, существует ли логин в базе данных
if is_login_exists_in_db(login):
# Сохраняем логин в словарь авторизованных пользователей
auth_users[chat_id] = login
await message.answer(f"Вы успешно вошли в систему как {login}.")
await show_profile_menu(chat_id)
await state.clear()
else:
# Если логин не найден
builder = InlineKeyboardBuilder()
builder.add(types.InlineKeyboardButton(text="Назад🔙", callback_data="main_menu"))
builder.add(types.InlineKeyboardButton(text="Попробовать снова", callback_data="login")) # Кнопка для повторного ввода
await message.answer(
"Логин не найден. Пожалуйста, введите корректный логин или вернитесь в главное меню.",
reply_markup=builder.as_markup()
)
await state.clear() await state.clear()
await message.answer(f"Вы успешно вошли в систему как {login}.")
await show_profile_menu(chat_id)
# Отображение меню профиля # Отображение меню профиля
async def show_profile_menu(chat_id): async def show_profile_menu(chat_id):
builder = InlineKeyboardBuilder() builder = InlineKeyboardBuilder()
builder.add(types.InlineKeyboardButton(text="Профиль", callback_data="profile")) builder.add(types.InlineKeyboardButton(text="Профиль👤", callback_data="profile"))
builder.add(types.InlineKeyboardButton(text="Мои заказы", callback_data="show_orders")) # Новая кнопка для заказа builder.add(types.InlineKeyboardButton(text="Мои заказы", callback_data="show_orders")) # Новая кнопка для заказа
await bot.send_message(chat_id, "Выберите действие:", reply_markup=builder.as_markup()) await bot.send_message(chat_id, "Выберите действие:", reply_markup=builder.as_markup())
# Обработчик нажатия на "Профиль" # Обработчик нажатия на "Профиль"
...@@ -110,10 +134,10 @@ async def show_profile(call: CallbackQuery): ...@@ -110,10 +134,10 @@ async def show_profile(call: CallbackQuery):
await delete_messages_up_to_start(call.message.chat.id, call.message.message_id) await delete_messages_up_to_start(call.message.chat.id, call.message.message_id)
builder = InlineKeyboardBuilder() builder = InlineKeyboardBuilder()
builder.add(types.InlineKeyboardButton(text="Выйти", callback_data="logout")) builder.add(types.InlineKeyboardButton(text="Выйти🔚", callback_data="logout"))
builder.add(types.InlineKeyboardButton(text="Назад", callback_data="profile_menu")) builder.add(types.InlineKeyboardButton(text="Назад🔙", callback_data="profile_menu"))
await call.message.answer(fаш профиль:\nЛогин: {login}\nВыберите действие:", reply_markup=builder.as_markup()) await call.message.answer(fы авторизованы как {login}\n", reply_markup=builder.as_markup())
# Обработчик нажатия на "Назад" из профиля # Обработчик нажатия на "Назад" из профиля
@router.callback_query(lambda call: call.data == 'profile_menu') @router.callback_query(lambda call: call.data == 'profile_menu')
...@@ -160,15 +184,32 @@ async def show_orders(call: CallbackQuery): ...@@ -160,15 +184,32 @@ async def show_orders(call: CallbackQuery):
if login: if login:
user_orders = get_order_statuses_with_ids(login) user_orders = get_order_statuses_with_ids(login)
# Перевод статусов
status_translation = {
'wait_confirmation': 'Ожидает подтверждения⏳',
'in_work': 'В работе🛠️',
'ready': 'Готов✔️',
'done': 'Получен🚩',
'canceled': 'Отменен❌'
}
# Проверка и вывод заказов
if user_orders: if user_orders:
order_details = [f"Order ID: {order_id}, Status: {status}" for order_id, status in user_orders] print(user_orders)
orders_text = "Ваши заказы:\n" + "\n".join(order_details) order_details = [
f"Номер заказа: {order_id}\nСтатус: {status_translation.get(status, 'Неизвестный статус')}"
for order_id, status in user_orders
]
orders_text = "Ваши заказы:\n" + "\n\n".join(order_details)
else: else:
orders_text = "Заказы отсутствуют." orders_text = "Заказы отсутствуют."
# Строим меню с кнопкой возврата # Строим меню с кнопкой возврата
builder = InlineKeyboardBuilder() builder = InlineKeyboardBuilder()
builder.add(types.InlineKeyboardButton(text="Назад", callback_data="profile_menu")) builder.add(types.InlineKeyboardButton(text="Назад🔙", callback_data="profile_menu"))
await call.message.answer(orders_text, reply_markup=builder.as_markup()) await call.message.answer(orders_text, reply_markup=builder.as_markup())
else: else:
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment