RewardApp / trash /auth /user_management.py
Mhdeusi's picture
Rename auth/user_management.py to trash/auth/user_management.py
d0309e7 verified
from datetime import datetime
from .authentication import auth_manager
import json
import os
class UserManagement:
def __init__(self, users_file='data/users.json'):
self.users_file = users_file
self.users = self.load_users()
def load_users(self):
"""بارگذاری کاربران از فایل"""
try:
if os.path.exists(self.users_file):
with open(self.users_file, 'r', encoding='utf-8') as f:
return json.load(f)
return {}
except Exception as e:
print(f"Error loading users: {e}")
return {}
def save_users(self):
"""ذخیره کاربران در فایل"""
try:
os.makedirs(os.path.dirname(self.users_file), exist_ok=True)
with open(self.users_file, 'w', encoding='utf-8') as f:
json.dump(self.users, f, ensure_ascii=False, indent=2)
return True
except Exception as e:
print(f"Error saving users: {e}")
return False
def register_user(self, username, email, password, role='student', **extra_data):
"""ثبت نام کاربر جدید"""
# بررسی تکراری نبودن username و email
for user_id, user_data in self.users.items():
if user_data['username'] == username:
return False, "Username already exists"
if user_data['email'] == email:
return False, "Email already exists"
# ایجاد کاربر جدید
user_id = str(len(self.users) + 1)
hashed_password = auth_manager.hash_password(password)
self.users[user_id] = {
'user_id': user_id,
'username': username,
'email': email,
'password': hashed_password,
'role': role,
'created_at': datetime.now().isoformat(),
'last_login': None,
'profile': {
'full_name': extra_data.get('full_name', ''),
'bio': extra_data.get('bio', ''),
'avatar': extra_data.get('avatar', '')
},
'progress': {
'total_score': 0,
'completed_lessons': [],
'current_lesson': 1,
'achievements': []
},
'is_active': True
}
if self.save_users():
return True, user_id
return False, "Error saving user data"
def authenticate_user(self, username, password):
"""احراز هویت کاربر"""
for user_id, user_data in self.users.items():
if user_data['username'] == username and user_data['is_active']:
if auth_manager.check_password(user_data['password'], password):
# به‌روزرسانی آخرین زمان ورود
user_data['last_login'] = datetime.now().isoformat()
self.save_users()
return True, {
'user_id': user_id,
'username': user_data['username'],
'role': user_data['role'],
'profile': user_data['profile']
}
else:
return False, "Invalid password"
return False, "User not found"
def get_user(self, user_id):
"""دریافت اطلاعات کاربر"""
return self.users.get(user_id)
def update_user_profile(self, user_id, **updates):
"""به‌روزرسانی پروفایل کاربر"""
if user_id not in self.users:
return False, "User not found"
user = self.users[user_id]
# به‌روزرسانی فیلدهای اصلی
if 'email' in updates:
user['email'] = updates['email']
# به‌روزرسانی پروفایل
if 'profile' in updates:
for key, value in updates['profile'].items():
if value is not None:
user['profile'][key] = value
# به‌روزرسانی progress
if 'progress' in updates:
for key, value in updates['progress'].items():
if key == 'total_score':
user['progress'][key] += value
elif key == 'completed_lessons':
if value not in user['progress'][key]:
user['progress'][key].append(value)
else:
user['progress'][key] = value
if self.save_users():
return True, "Profile updated successfully"
return False, "Error updating profile"
def deactivate_user(self, user_id):
"""غیرفعال کردن کاربر"""
if user_id in self.users:
self.users[user_id]['is_active'] = False
return self.save_users()
return False
def get_user_progress(self, user_id):
"""دریافت پیشرفت کاربر"""
user = self.get_user(user_id)
if user:
return user.get('progress', {})
return None
# نمونه singleton
user_manager = UserManagement()