Spaces:
Sleeping
Sleeping
Create admin.py
Browse files- routes/admin.py +56 -0
routes/admin.py
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# routes/admin.py
|
| 2 |
+
from flask import Blueprint, request, jsonify
|
| 3 |
+
from db import db
|
| 4 |
+
from bson.objectid import ObjectId
|
| 5 |
+
from utils.auth import token_required, admin_required
|
| 6 |
+
|
| 7 |
+
admin_bp = Blueprint("admin", __name__)
|
| 8 |
+
|
| 9 |
+
@admin_bp.route("/stats", methods=["GET"])
|
| 10 |
+
@token_required
|
| 11 |
+
@admin_required
|
| 12 |
+
def stats():
|
| 13 |
+
total_feedback = db.feedback.count_documents({})
|
| 14 |
+
total_students = db.users.count_documents({"role":"student"})
|
| 15 |
+
# average rating per course
|
| 16 |
+
pipeline = [
|
| 17 |
+
{"$group": {"_id": "$course_id", "avgRating": {"$avg": "$rating"}, "count": {"$sum":1}}}
|
| 18 |
+
]
|
| 19 |
+
agg = list(db.feedback.aggregate(pipeline))
|
| 20 |
+
return jsonify({
|
| 21 |
+
"total_feedback": total_feedback,
|
| 22 |
+
"total_students": total_students,
|
| 23 |
+
"ratings_by_course": agg
|
| 24 |
+
})
|
| 25 |
+
|
| 26 |
+
@admin_bp.route("/students", methods=["GET"])
|
| 27 |
+
@token_required
|
| 28 |
+
@admin_required
|
| 29 |
+
def list_students():
|
| 30 |
+
docs = list(db.users.find({"role":"student"}))
|
| 31 |
+
out = []
|
| 32 |
+
for d in docs:
|
| 33 |
+
d["_id"] = str(d["_id"])
|
| 34 |
+
d.pop("password", None)
|
| 35 |
+
out.append(d)
|
| 36 |
+
return jsonify(out)
|
| 37 |
+
|
| 38 |
+
@admin_bp.route("/students/<uid>/block", methods=["PUT"])
|
| 39 |
+
@token_required
|
| 40 |
+
@admin_required
|
| 41 |
+
def block_user(uid):
|
| 42 |
+
action = request.args.get("action","block")
|
| 43 |
+
if action=="unblock":
|
| 44 |
+
db.users.update_one({"_id": ObjectId(uid)}, {"$set":{"blocked": False}})
|
| 45 |
+
return jsonify({"message":"Unblocked"})
|
| 46 |
+
else:
|
| 47 |
+
db.users.update_one({"_id": ObjectId(uid)}, {"$set":{"blocked": True}})
|
| 48 |
+
return jsonify({"message":"Blocked"})
|
| 49 |
+
|
| 50 |
+
@admin_bp.route("/students/<uid>", methods=["DELETE"])
|
| 51 |
+
@token_required
|
| 52 |
+
@admin_required
|
| 53 |
+
def delete_user(uid):
|
| 54 |
+
db.users.delete_one({"_id": ObjectId(uid)})
|
| 55 |
+
db.feedback.delete_many({"student_id": uid})
|
| 56 |
+
return jsonify({"message":"User + feedbacks deleted"})
|