Revamps the entire user deletion process to resolve critical performance bottlenecks that caused the web panel and database to freeze when removing multiple users. - **Backend:** Core scripts (`kickuser.py`, `remove_user.py`) and the database layer are re-engineered to handle multiple users in a single, efficient batch operation using MongoDB's `delete_many`. - **API:** A new `POST /api/v1/users/bulk-delete` endpoint is introduced for batch removals. The existing single-user `DELETE` endpoint is fixed to align with the new bulk logic. - **Frontend:** The Users page now intelligently calls the bulk API when multiple users are selected, drastically improving UI responsiveness and reducing server load.
44 lines
1.5 KiB
Python
44 lines
1.5 KiB
Python
import pymongo
|
|
from bson.objectid import ObjectId
|
|
|
|
class Database:
|
|
def __init__(self, db_name="blitz_panel", collection_name="users"):
|
|
try:
|
|
self.client = pymongo.MongoClient("mongodb://localhost:27017/")
|
|
self.db = self.client[db_name]
|
|
self.collection = self.db[collection_name]
|
|
self.client.server_info()
|
|
except pymongo.errors.ConnectionFailure as e:
|
|
print(f"Could not connect to MongoDB: {e}")
|
|
raise
|
|
|
|
def add_user(self, user_data):
|
|
username = user_data.pop('username', None)
|
|
if not username:
|
|
raise ValueError("Username is required")
|
|
|
|
if self.collection.find_one({"_id": username.lower()}):
|
|
return None
|
|
|
|
user_data['_id'] = username.lower()
|
|
return self.collection.insert_one(user_data)
|
|
|
|
def get_user(self, username):
|
|
return self.collection.find_one({"_id": username.lower()})
|
|
|
|
def get_all_users(self):
|
|
return list(self.collection.find({}))
|
|
|
|
def update_user(self, username, updates):
|
|
return self.collection.update_one({"_id": username.lower()}, {"$set": updates})
|
|
|
|
def delete_user(self, username):
|
|
return self.collection.delete_one({"_id": username.lower()})
|
|
|
|
def delete_users(self, usernames):
|
|
return self.collection.delete_many({"_id": {"$in": usernames}})
|
|
|
|
try:
|
|
db = Database()
|
|
except pymongo.errors.ConnectionFailure:
|
|
db = None |