|
|
@ -1,5 +1,5 @@ |
|
|
|
from utils .auth import auth_required, requires_role |
|
|
|
from utils .auth import auth_required, requires_role |
|
|
|
from flask import Blueprint, jsonify, g |
|
|
|
from flask import Blueprint, jsonify, g,url_for |
|
|
|
from db.model import User, Course, Enrollment, Chat, db |
|
|
|
from db.model import User, Course, Enrollment, Chat, db |
|
|
|
from sqlalchemy import select, func, desc, and_ |
|
|
|
from sqlalchemy import select, func, desc, and_ |
|
|
|
from datetime import datetime, timedelta |
|
|
|
from datetime import datetime, timedelta |
|
|
@ -141,3 +141,44 @@ def get_discussion_stats(): |
|
|
|
return jsonify({'message': f'An error occurred: {str(e)}'}), 500 |
|
|
|
return jsonify({'message': f'An error occurred: {str(e)}'}), 500 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@admin.route('/stats/userDetail', methods=['GET']) |
|
|
|
|
|
|
|
@auth_required() |
|
|
|
|
|
|
|
@requires_role([UserRole.ADMIN]) |
|
|
|
|
|
|
|
def get_user_details(): |
|
|
|
|
|
|
|
""" |
|
|
|
|
|
|
|
Get detailed information for all users. |
|
|
|
|
|
|
|
Only accessible by admin users. |
|
|
|
|
|
|
|
""" |
|
|
|
|
|
|
|
try: |
|
|
|
|
|
|
|
current_user: User = g.current_user |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Get all users with basic info |
|
|
|
|
|
|
|
users = db.session.execute( |
|
|
|
|
|
|
|
select(User) |
|
|
|
|
|
|
|
.order_by(desc(User.joinedDate)) |
|
|
|
|
|
|
|
).scalars() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Format user data |
|
|
|
|
|
|
|
user_list = [{ |
|
|
|
|
|
|
|
'id': str(user.id), |
|
|
|
|
|
|
|
'username': user.username, |
|
|
|
|
|
|
|
'email': user.email, |
|
|
|
|
|
|
|
'firstName': user.firstName, |
|
|
|
|
|
|
|
'lastName': user.lastName, |
|
|
|
|
|
|
|
'profilePicture': url_for('send_file', filename=current_user.pfpFilename, _external=True), |
|
|
|
|
|
|
|
'bio': user.bio, |
|
|
|
|
|
|
|
'role': user.role, |
|
|
|
|
|
|
|
'isActivated': user.isActivated, |
|
|
|
|
|
|
|
'joinedDate': user.joinedDate.isoformat(), |
|
|
|
|
|
|
|
'lastOnline': user.lastOnline.isoformat(), |
|
|
|
|
|
|
|
'dateOfBirth': user.dob.isoformat() if user.dob else None |
|
|
|
|
|
|
|
} for user in users] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return jsonify({ |
|
|
|
|
|
|
|
'users': user_list, |
|
|
|
|
|
|
|
'count': len(user_list) |
|
|
|
|
|
|
|
}), 200 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
except Exception as e: |
|
|
|
|
|
|
|
return jsonify({'message': f'An error occurred: {str(e)}'}), 500 |
|
|
|