roshcheeku commited on
Commit
86d410f
·
verified ·
1 Parent(s): 68e7486

Create admin.py

Browse files
Files changed (1) hide show
  1. 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"})