From 5abe922b9827afef3aa057af448a90c2d68c695c Mon Sep 17 00:00:00 2001 From: Kushal Dotel Date: Mon, 13 Jan 2025 07:04:08 +0545 Subject: [PATCH] Fix Backend --- backend/blueprints/admin/__init__.py | 45 +++++++++++++++++++++++++- backend/blueprints/course/__init__.py | 2 +- frontend/edu-connect/src/lib/routes.ts | 2 +- 3 files changed, 46 insertions(+), 3 deletions(-) diff --git a/backend/blueprints/admin/__init__.py b/backend/blueprints/admin/__init__.py index 9e2641a..1ed7068 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 @@ -138,3 +138,46 @@ def get_discussion_stats(): except Exception as e: 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 + + diff --git a/backend/blueprints/course/__init__.py b/backend/blueprints/course/__init__.py index b88f1e8..f224ae9 100644 --- a/backend/blueprints/course/__init__.py +++ b/backend/blueprints/course/__init__.py @@ -405,7 +405,7 @@ def enrolled_courses(): @course.route('/myCourses') @auth_required() -def enrolled_courses(): +def my_courses(): courses: Course = db.session.execute(select(Course).where(Course.authorID == g.current_user.id) ).scalars() course_list: list[dict] = [] diff --git a/frontend/edu-connect/src/lib/routes.ts b/frontend/edu-connect/src/lib/routes.ts index 011951d..e8f6eff 100644 --- a/frontend/edu-connect/src/lib/routes.ts +++ b/frontend/edu-connect/src/lib/routes.ts @@ -1,5 +1,5 @@ export const routes = { - INDEX_PAGE : '/' , + INDEX_PAGE : '/' , LOGIN_ROUTES : '/auth/login', REGISTER_ROUTES : '/auth/register', DASHBOARD_ROUTE : '/admin/dashboard',