From aff6d939ca2db9545a13aa67ef32ac3257e8372e Mon Sep 17 00:00:00 2001 From: fine4me Date: Mon, 13 Jan 2025 00:08:36 +0545 Subject: [PATCH] user reoutes --- backend/blueprints/admin/__init__.py | 43 +++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/backend/blueprints/admin/__init__.py b/backend/blueprints/admin/__init__.py index fb9dfa7..0eb8dad 100644 --- a/backend/blueprints/admin/__init__.py +++ b/backend/blueprints/admin/__init__.py @@ -1,5 +1,5 @@ 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 sqlalchemy import select, func, desc, and_ from datetime import datetime, timedelta @@ -141,3 +141,44 @@ def get_discussion_stats(): 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