From 2f6b85d4a62fdfb410c02fcd705cc02becfe2d60 Mon Sep 17 00:00:00 2001 From: Vladless Date: Wed, 4 Dec 2024 02:46:57 +0300 Subject: [PATCH] unique server_name --- database.py | 17 +++++++++++++++++ handlers/admin/admin_servers.py | 9 ++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/database.py b/database.py index f1ad9c2d..40ab4719 100644 --- a/database.py +++ b/database.py @@ -134,6 +134,23 @@ async def init_db(): await conn.close() +async def check_unique_server_name(server_name: str) -> bool: + """ + Проверяет уникальность имени сервера. + + :param server_name: Имя сервера. + :return: True, если имя сервера уникально, False, если уже существует. + """ + conn = await asyncpg.connect(DATABASE_URL) + + result = await conn.fetchrow( + "SELECT 1 FROM servers WHERE server_name = $1 LIMIT 1", server_name + ) + + await conn.close() + + return result is None + async def create_coupon(coupon_code: str, amount: float, usage_limit: int, session: Any): """ diff --git a/handlers/admin/admin_servers.py b/handlers/admin/admin_servers.py index e4c518f9..377af072 100644 --- a/handlers/admin/admin_servers.py +++ b/handlers/admin/admin_servers.py @@ -4,9 +4,10 @@ from aiogram.fsm.state import State, StatesGroup from aiogram.types import InlineKeyboardButton from aiogram.utils.keyboard import InlineKeyboardBuilder import asyncpg +from typing import Any from config import DATABASE_URL -from database import get_servers_from_db +from database import get_servers_from_db, check_unique_server_name from filters.admin import IsAdminFilter router = Router() @@ -106,6 +107,11 @@ async def handle_server_name_input(message: types.Message, state: FSMContext): await message.answer("❌ Имя сервера не может быть пустым. Попробуйте снова.") return + server_unique = await check_unique_server_name(server_name) + if not server_unique: + await message.answer("❌ Сервер с таким именем уже существует. Пожалуйста, выберите другое имя.") + return + user_data = await state.get_data() cluster_name = user_data.get('cluster_name') await state.update_data(server_name=server_name) @@ -124,6 +130,7 @@ async def handle_server_name_input(message: types.Message, state: FSMContext): await state.set_state(UserEditorState.waiting_for_api_url) + @router.message(UserEditorState.waiting_for_api_url, IsAdminFilter()) async def handle_api_url_input(message: types.Message, state: FSMContext): api_url = message.text.strip()