Короче опять дохуя изменений:
1. Оно перво на перво работает 2.Реализовано почти всё вроде из кнопок, осталось ток оплату подписок, выдачу URI и пополнение конечно. 3.Убрал .json конфиг и сделал всё через переменные окружения
This commit is contained in:
@@ -1,53 +1,103 @@
|
||||
from pymongo import MongoClient
|
||||
from utils.LogCon import setup_logger, load_config
|
||||
import os
|
||||
from motor.motor_asyncio import AsyncIOMotorClient
|
||||
import logging
|
||||
|
||||
|
||||
class MongoDBRepository:
|
||||
def __init__(self, config_path="config.json"):
|
||||
self.config = load_config()
|
||||
self.client = MongoClient(config["mongodb_uri"])
|
||||
self.db = self.client[config["database_name"]]
|
||||
self.collection = self.db["vpn_servers"]
|
||||
def __init__(self):
|
||||
# Настройки MongoDB из переменных окружения
|
||||
mongo_uri = os.getenv("MONGO_URL")
|
||||
database_name = os.getenv("DB_NAME")
|
||||
server_collection = os.getenv("SERVER_COLLECTION", "servers")
|
||||
plan_collection = os.getenv("PLAN_COLLECTION", "plans")
|
||||
|
||||
def add_server(self, server_data):
|
||||
"""Добавляет новый VPN сервер в коллекцию."""
|
||||
result = self.collection.insert_one(server_data)
|
||||
print(f"VPN сервер добавлен с ID: {result.inserted_id}")
|
||||
# Подключение к базе данных и коллекциям
|
||||
self.client = AsyncIOMotorClient(mongo_uri)
|
||||
self.db = self.client[database_name]
|
||||
self.collection = self.db[server_collection] # Коллекция серверов
|
||||
self.plans_collection = self.db[plan_collection] # Коллекция тарифных планов
|
||||
self.logger = logging.getLogger(__name__)
|
||||
|
||||
async def add_subscription_plan(self, plan_data):
|
||||
"""Добавляет новый тарифный план в коллекцию."""
|
||||
result = await self.plans_collection.insert_one(plan_data)
|
||||
self.logger.debug(f"Тарифный план добавлен с ID: {result.inserted_id}")
|
||||
return result.inserted_id
|
||||
|
||||
def get_server(self, server_id):
|
||||
"""Получает сервер VPN по его ID."""
|
||||
server = self.collection.find_one({"_id": server_id})
|
||||
if server:
|
||||
print(f"Найден VPN сервер: {server}")
|
||||
async def get_subscription_plan(self, plan_id):
|
||||
"""Получает тарифный план по его имени."""
|
||||
plan = await self.plans_collection.find_one({"_id": plan_id})
|
||||
if plan:
|
||||
self.logger.debug(f"Найден тарифный план: {plan}")
|
||||
else:
|
||||
print(f"VPN сервер с ID {server_id} не найден.")
|
||||
self.logger.error(f"Тарифный план {plan_id} не найден.")
|
||||
return plan
|
||||
|
||||
async def add_server(self, server_data):
|
||||
"""Добавляет новый VPN сервер в коллекцию."""
|
||||
result = await self.collection.insert_one(server_data)
|
||||
self.logger.debug(f"VPN сервер добавлен с ID: {result.inserted_id}")
|
||||
return result.inserted_id
|
||||
|
||||
async def get_server(self, server_id):
|
||||
"""Получает сервер VPN по его ID."""
|
||||
server = await self.collection.find_one({"_id": server_id})
|
||||
if server:
|
||||
self.logger.debug(f"Найден VPN сервер: {server}")
|
||||
else:
|
||||
self.logger.debug(f"VPN сервер с ID {server_id} не найден.")
|
||||
return server
|
||||
|
||||
def update_server(self, server_id, update_data):
|
||||
"""Обновляет данные VPN сервера."""
|
||||
result = self.collection.update_one({"_id": server_id}, {"$set": update_data})
|
||||
if result.matched_count > 0:
|
||||
print(f"VPN сервер с ID {server_id} обновлен.")
|
||||
async def get_server_with_least_clients(self):
|
||||
"""Возвращает сервер с наименьшим количеством подключенных клиентов."""
|
||||
pipeline = [
|
||||
{
|
||||
"$addFields": {
|
||||
"current_clients": {"$size": {"$ifNull": ["$clients", []]}}
|
||||
}
|
||||
},
|
||||
{
|
||||
"$sort": {"current_clients": 1}
|
||||
},
|
||||
{
|
||||
"$limit": 1
|
||||
}
|
||||
]
|
||||
|
||||
result = await self.collection.aggregate(pipeline).to_list(length=1)
|
||||
if result:
|
||||
server = result[0]
|
||||
self.logger.debug(f"Найден сервер с наименьшим количеством клиентов: {server}")
|
||||
return server
|
||||
else:
|
||||
print(f"VPN сервер с ID {server_id} не найден.")
|
||||
self.logger.debug("Не найдено серверов.")
|
||||
return None
|
||||
|
||||
async def update_server(self, server_id, update_data):
|
||||
"""Обновляет данные VPN сервера."""
|
||||
result = await self.collection.update_one({"_id": server_id}, {"$set": update_data})
|
||||
if result.matched_count > 0:
|
||||
self.logger.debug(f"VPN сервер с ID {server_id} обновлен.")
|
||||
else:
|
||||
self.logger.debug(f"VPN сервер с ID {server_id} не найден.")
|
||||
return result.matched_count > 0
|
||||
|
||||
def delete_server(self, server_id):
|
||||
async def delete_server(self, server_id):
|
||||
"""Удаляет VPN сервер по его ID."""
|
||||
result = self.collection.delete_one({"_id": server_id})
|
||||
result = await self.collection.delete_one({"_id": server_id})
|
||||
if result.deleted_count > 0:
|
||||
print(f"VPN сервер с ID {server_id} удален.")
|
||||
self.logger.debug(f"VPN сервер с ID {server_id} удален.")
|
||||
else:
|
||||
print(f"VPN сервер с ID {server_id} не найден.")
|
||||
self.logger.debug(f"VPN сервер с ID {server_id} не найден.")
|
||||
return result.deleted_count > 0
|
||||
|
||||
def list_servers(self):
|
||||
async def list_servers(self):
|
||||
"""Возвращает список всех VPN серверов."""
|
||||
servers = list(self.collection.find())
|
||||
print(f"Найдено {len(servers)} VPN серверов.")
|
||||
servers = await self.collection.find().to_list(length=1000) # Получить до 1000 серверов (можно настроить)
|
||||
self.logger.debug(f"Найдено {len(servers)} VPN серверов.")
|
||||
return servers
|
||||
|
||||
def close_connection(self):
|
||||
async def close_connection(self):
|
||||
"""Закрывает подключение к базе данных MongoDB."""
|
||||
self.client.close()
|
||||
print("Подключение к MongoDB закрыто.")
|
||||
self.logger.debug("Подключение к MongoDB закрыто.")
|
||||
|
||||
Reference in New Issue
Block a user