{ "info": { "name": "EduVerse API - Full Collection", "description": "EduVerse API - Full Collection with 32 module folders, 200+ requests. Covers Auth, Users, Campus, Departments, Programs, Semesters, Courses, Sections, Schedules, Enrollments, Assignments, Grades, Rubrics, Files, Attendance, Quizzes, Labs, Notifications, Messaging, Discussions, Announcements, Community, Schedule, Exams, Calendar, Integrations, Materials, Structure, User Profile & Preferences, Admin User Management, Admin Roles & Permissions, and Google Drive Integration.", "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" }, "variable": [ { "key": "base_url", "value": "http://localhost:8081", "type": "string" }, { "key": "student_token", "value": "PASTE_STUDENT_TOKEN_HERE", "type": "string" }, { "key": "instructor_token", "value": "PASTE_INSTRUCTOR_TOKEN_HERE", "type": "string" }, { "key": "admin_token", "value": "PASTE_ADMIN_TOKEN_HERE", "type": "string" }, { "key": "ta_token", "value": "PASTE_TA_TOKEN_HERE", "type": "string" }, { "key": "it_admin_token", "value": "PASTE_IT_ADMIN_TOKEN_HERE", "type": "string" }, { "key": "announcement_id", "type": "string", "value": "1" }, { "key": "category_id", "type": "string", "value": "1" }, { "key": "post_id", "type": "string", "value": "1" }, { "key": "comment_id", "type": "string", "value": "1" }, { "key": "exam_id", "type": "string", "value": "1" }, { "key": "calendar_event_id", "type": "string", "value": "1" }, { "key": "integration_id", "type": "string", "value": "1" }, { "key": "material_id", "type": "string", "value": "1" }, { "key": "structure_id", "type": "string", "value": "1" }, { "key": "createdAlertId", "value": "" } ], "item": [ { "name": "🔐 Authentication", "item": [ { "name": "Login (Student)", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"email\":\"student.tarek@example.com\",\"password\":\"SecureP@ss123\",\"rememberMe\":false}" }, "url": { "raw": "{{baseUrl}}/api/auth/login", "host": [ "{{baseUrl}}" ], "path": [ "api", "auth", "login" ] } } }, { "name": "Login (Instructor)", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"email\":\"instructor.tarek@example.com\",\"password\":\"SecureP@ss123\",\"rememberMe\":false}" }, "url": { "raw": "{{baseUrl}}/api/auth/login", "host": [ "{{baseUrl}}" ], "path": [ "api", "auth", "login" ] } } }, { "name": "Login (Admin)", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"email\":\"admin.tarek@example.com\",\"password\":\"SecureP@ss123\",\"rememberMe\":false}" }, "url": { "raw": "{{baseUrl}}/api/auth/login", "host": [ "{{baseUrl}}" ], "path": [ "api", "auth", "login" ] } } }, { "name": "Login (TA)", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"email\":\"ta.tarek@example.com\",\"password\":\"SecureP@ss123\",\"rememberMe\":false}" }, "url": { "raw": "{{baseUrl}}/api/auth/login", "host": [ "{{baseUrl}}" ], "path": [ "api", "auth", "login" ] } } }, { "name": "Login (IT Admin)", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"email\":\"it_admin.tarek@example.com\",\"password\":\"SecureP@ss123\",\"rememberMe\":false}" }, "url": { "raw": "{{baseUrl}}/api/auth/login", "host": [ "{{baseUrl}}" ], "path": [ "api", "auth", "login" ] } } }, { "name": "Get My Profile (Admin)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/auth/me", "host": [ "{{baseUrl}}" ], "path": [ "api", "auth", "me" ] } } }, { "name": "Get My Profile (Student)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/auth/me", "host": [ "{{baseUrl}}" ], "path": [ "api", "auth", "me" ] } } }, { "name": "Logout (Admin)", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/auth/logout", "host": [ "{{baseUrl}}" ], "path": [ "api", "auth", "logout" ] } } } ] }, { "name": "👥 User Management", "item": [ { "name": "List All Users", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/admin/users", "host": [ "{{baseUrl}}" ], "path": [ "api", "admin", "users" ] } } }, { "name": "Get User by ID", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/admin/users/57", "host": [ "{{baseUrl}}" ], "path": [ "api", "admin", "users", "57" ] } } }, { "name": "Update User", "request": { "method": "PUT", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"firstName\":\"StudentUpdated\",\"lastName\":\"Tarek\"}" }, "url": { "raw": "{{baseUrl}}/api/admin/users/57", "host": [ "{{baseUrl}}" ], "path": [ "api", "admin", "users", "57" ] } } }, { "name": "List Users (Paginated)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/admin/users?page=1&size=10", "host": [ "{{baseUrl}}" ], "path": [ "api", "admin", "users" ], "query": [ { "key": "page", "value": "1" }, { "key": "size", "value": "10" } ] }, "description": "List users with pagination. The /users/search route has a known route ordering issue, so use the list endpoint with filters instead." } }, { "name": "Update User Status", "request": { "method": "PUT", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"status\":\"active\"}" }, "url": { "raw": "{{baseUrl}}/api/admin/users/57/status", "host": [ "{{baseUrl}}" ], "path": [ "api", "admin", "users", "57", "status" ] } } }, { "name": "Get User Permissions", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/admin/users/57/permissions", "host": [ "{{baseUrl}}" ], "path": [ "api", "admin", "users", "57", "permissions" ] } } }, { "name": "List All Roles", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/admin/roles", "host": [ "{{baseUrl}}" ], "path": [ "api", "admin", "roles" ] } } }, { "name": "List All Permissions", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/admin/permissions", "host": [ "{{baseUrl}}" ], "path": [ "api", "admin", "permissions" ] } } } ] }, { "name": "🏛️ Campus", "item": [ { "name": "List Campuses", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/campuses", "host": [ "{{baseUrl}}" ], "path": [ "api", "campuses" ] } } }, { "name": "Get Campus by ID", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/campuses/1", "host": [ "{{baseUrl}}" ], "path": [ "api", "campuses", "1" ] } } }, { "name": "Create Campus", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"name\":\"Test Campus\",\"code\":\"TC01\",\"address\":\"123 Test St\",\"city\":\"Cairo\",\"country\":\"Egypt\",\"phone\":\"+20 123 456 7890\",\"email\":\"campus@test.com\",\"timezone\":\"Africa/Cairo\"}" }, "url": { "raw": "{{baseUrl}}/api/campuses", "host": [ "{{baseUrl}}" ], "path": [ "api", "campuses" ] } } }, { "name": "Update Campus", "request": { "method": "PUT", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"name\":\"Updated Campus Name\"}" }, "url": { "raw": "{{baseUrl}}/api/campuses/1", "host": [ "{{baseUrl}}" ], "path": [ "api", "campuses", "1" ] } } } ] }, { "name": "🏢 Departments", "item": [ { "name": "List Departments by Campus", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/campuses/1/departments", "host": [ "{{baseUrl}}" ], "path": [ "api", "campuses", "1", "departments" ] } } }, { "name": "Get Department by ID", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/departments/1", "host": [ "{{baseUrl}}" ], "path": [ "api", "departments", "1" ] } } }, { "name": "Create Department", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"campusId\":1,\"name\":\"Test Department\",\"code\":\"TD01\",\"description\":\"A test department\"}" }, "url": { "raw": "{{baseUrl}}/api/departments", "host": [ "{{baseUrl}}" ], "path": [ "api", "departments" ] } } }, { "name": "Update Department", "request": { "method": "PUT", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"name\":\"Updated Department\"}" }, "url": { "raw": "{{baseUrl}}/api/departments/1", "host": [ "{{baseUrl}}" ], "path": [ "api", "departments", "1" ] } } } ] }, { "name": "📚 Programs", "item": [ { "name": "List Programs by Department", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/departments/1/programs", "host": [ "{{baseUrl}}" ], "path": [ "api", "departments", "1", "programs" ] } } }, { "name": "Get Program by ID", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/programs/1", "host": [ "{{baseUrl}}" ], "path": [ "api", "programs", "1" ] } } }, { "name": "Create Program", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"departmentId\":1,\"name\":\"Test Program\",\"code\":\"TP01\",\"degreeType\":\"bachelor\",\"durationYears\":4,\"description\":\"A test program\"}" }, "url": { "raw": "{{baseUrl}}/api/programs", "host": [ "{{baseUrl}}" ], "path": [ "api", "programs" ] } } }, { "name": "Update Program", "request": { "method": "PUT", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"name\":\"Updated Program\"}" }, "url": { "raw": "{{baseUrl}}/api/programs/1", "host": [ "{{baseUrl}}" ], "path": [ "api", "programs", "1" ] } } } ] }, { "name": "📅 Semesters", "item": [ { "name": "List Semesters", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/semesters", "host": [ "{{baseUrl}}" ], "path": [ "api", "semesters" ] } } }, { "name": "Get Current Semester", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/semesters/current", "host": [ "{{baseUrl}}" ], "path": [ "api", "semesters", "current" ] } } }, { "name": "Get Semester by ID", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/semesters/1", "host": [ "{{baseUrl}}" ], "path": [ "api", "semesters", "1" ] } } }, { "name": "Create Semester", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"name\":\"Fall 2026\",\"code\":\"F2026\",\"startDate\":\"2026-09-01\",\"endDate\":\"2026-12-31\",\"registrationStart\":\"2026-08-01\",\"registrationEnd\":\"2026-08-25\"}" }, "url": { "raw": "{{baseUrl}}/api/semesters", "host": [ "{{baseUrl}}" ], "path": [ "api", "semesters" ] } } }, { "name": "Update Semester", "request": { "method": "PUT", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"name\":\"Fall 2026 Updated\"}" }, "url": { "raw": "{{baseUrl}}/api/semesters/1", "host": [ "{{baseUrl}}" ], "path": [ "api", "semesters", "1" ] } } } ] }, { "name": "📖 Courses", "item": [ { "name": "List Courses", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/courses", "host": [ "{{baseUrl}}" ], "path": [ "api", "courses" ] } } }, { "name": "Get Course by ID", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/courses/1", "host": [ "{{baseUrl}}" ], "path": [ "api", "courses", "1" ] } } }, { "name": "Get Courses by Department", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/courses/department/1", "host": [ "{{baseUrl}}" ], "path": [ "api", "courses", "department", "1" ] } } }, { "name": "Create Course", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"departmentId\":1,\"name\":\"Test Course\",\"code\":\"TC101\",\"description\":\"A test course for postman\",\"credits\":3,\"level\":\"beginner\"}" }, "url": { "raw": "{{baseUrl}}/api/courses", "host": [ "{{baseUrl}}" ], "path": [ "api", "courses" ] } } }, { "name": "Update Course", "request": { "method": "PATCH", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"name\":\"Updated Course Name\"}" }, "url": { "raw": "{{baseUrl}}/api/courses/1", "host": [ "{{baseUrl}}" ], "path": [ "api", "courses", "1" ] } } }, { "name": "Get Course Prerequisites", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/courses/2/prerequisites", "host": [ "{{baseUrl}}" ], "path": [ "api", "courses", "2", "prerequisites" ] } } }, { "name": "Add Prerequisite", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"prerequisiteCourseId\":1,\"isMandatory\":true}" }, "url": { "raw": "{{baseUrl}}/api/courses/3/prerequisites", "host": [ "{{baseUrl}}" ], "path": [ "api", "courses", "3", "prerequisites" ] } } } ] }, { "name": "📝 Course Sections", "item": [ { "name": "List Sections by Course", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/sections/course/1", "host": [ "{{baseUrl}}" ], "path": [ "api", "sections", "course", "1" ] } } }, { "name": "Get Section by ID", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/sections/11", "host": [ "{{baseUrl}}" ], "path": [ "api", "sections", "11" ] } } }, { "name": "Create Section", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"courseId\":1,\"semesterId\":1,\"maxCapacity\":30,\"location\":\"Room A101\"}" }, "url": { "raw": "{{baseUrl}}/api/sections", "host": [ "{{baseUrl}}" ], "path": [ "api", "sections" ] } } }, { "name": "Update Section", "request": { "method": "PATCH", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"maxCapacity\":35,\"location\":\"Room B202\"}" }, "url": { "raw": "{{baseUrl}}/api/sections/11", "host": [ "{{baseUrl}}" ], "path": [ "api", "sections", "11" ] } } }, { "name": "Update Enrollment Count", "request": { "method": "PATCH", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"action\":\"increment\"}" }, "url": { "raw": "{{baseUrl}}/api/sections/11/enrollment", "host": [ "{{baseUrl}}" ], "path": [ "api", "sections", "11", "enrollment" ] } } } ] }, { "name": "🕐 Course Schedules", "item": [ { "name": "Get Schedules by Section", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/schedules/section/11", "host": [ "{{baseUrl}}" ], "path": [ "api", "schedules", "section", "11" ] } } }, { "name": "Get Schedule by ID", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/schedules/1", "host": [ "{{baseUrl}}" ], "path": [ "api", "schedules", "1" ] } } }, { "name": "Create Schedule", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"dayOfWeek\":\"monday\",\"startTime\":\"09:00\",\"endTime\":\"10:30\",\"room\":\"A101\",\"building\":\"Main Building\",\"scheduleType\":\"lecture\"}" }, "url": { "raw": "{{baseUrl}}/api/schedules/section/11", "host": [ "{{baseUrl}}" ], "path": [ "api", "schedules", "section", "11" ] } } } ] }, { "name": "✅ Enrollments", "item": [ { "name": "My Enrolled Courses (Student)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/enrollments/my-courses", "host": [ "{{baseUrl}}" ], "path": [ "api", "enrollments", "my-courses" ] } } }, { "name": "Available Courses (Student)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/enrollments/available", "host": [ "{{baseUrl}}" ], "path": [ "api", "enrollments", "available" ] } } }, { "name": "Register for Course (Student)", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"sectionId\":11}" }, "url": { "raw": "{{baseUrl}}/api/enrollments/register", "host": [ "{{baseUrl}}" ], "path": [ "api", "enrollments", "register" ] } } }, { "name": "List Enrollments by Course (Admin)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/enrollments/course/1/list", "host": [ "{{baseUrl}}" ], "path": [ "api", "enrollments", "course", "1", "list" ] } } }, { "name": "List Students in Section (Admin)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/enrollments/section/11/students", "host": [ "{{baseUrl}}" ], "path": [ "api", "enrollments", "section", "11", "students" ] } } }, { "name": "Section Waitlist (Admin)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/enrollments/section/11/waitlist", "host": [ "{{baseUrl}}" ], "path": [ "api", "enrollments", "section", "11", "waitlist" ] } } }, { "name": "Role Guard Test - Course List (Student=403)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/enrollments/course/1/list", "host": [ "{{baseUrl}}" ], "path": [ "api", "enrollments", "course", "1", "list" ] } } } ] }, { "name": "📝 Assignments", "item": [ { "name": "List Assignments (Admin)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/assignments", "host": [ "{{baseUrl}}" ], "path": [ "api", "assignments" ] } } }, { "name": "List Assignments by Course", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/assignments?courseId=1", "host": [ "{{baseUrl}}" ], "path": [ "api", "assignments" ], "query": [ { "key": "courseId", "value": "1" } ] } } }, { "name": "Get Assignment by ID", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/assignments/3", "host": [ "{{baseUrl}}" ], "path": [ "api", "assignments", "3" ] } } }, { "name": "Create Assignment (Instructor)", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"courseId\":1,\"title\":\"Postman Test Assignment\",\"description\":\"An assignment created from Postman\",\"instructions\":\"Complete the tasks listed below\",\"submissionType\":\"file\",\"maxScore\":100,\"weight\":15,\"dueDate\":\"2026-06-15T23:59:59Z\",\"availableFrom\":\"2026-06-01T00:00:00Z\",\"lateSubmissionAllowed\":true,\"latePenaltyPercent\":10,\"maxFileSizeMb\":10,\"allowedFileTypes\":\"[\\\"pdf\\\",\\\"docx\\\",\\\"zip\\\"]\",\"status\":\"published\"}" }, "url": { "raw": "{{baseUrl}}/api/assignments", "host": [ "{{baseUrl}}" ], "path": [ "api", "assignments" ] } } }, { "name": "Update Assignment (Instructor)", "request": { "method": "PATCH", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"title\":\"Updated Assignment Title\",\"maxScore\":150}" }, "url": { "raw": "{{baseUrl}}/api/assignments/3", "host": [ "{{baseUrl}}" ], "path": [ "api", "assignments", "3" ] } } }, { "name": "Change Assignment Status (Instructor)", "request": { "method": "PATCH", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"status\":\"published\"}" }, "url": { "raw": "{{baseUrl}}/api/assignments/3/status", "host": [ "{{baseUrl}}" ], "path": [ "api", "assignments", "3", "status" ] } } }, { "name": "Submit Assignment (Student)", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"submissionText\":\"This is my submission for the assignment.\",\"submissionLink\":\"https://github.com/student/project\"}" }, "url": { "raw": "{{baseUrl}}/api/assignments/3/submit", "host": [ "{{baseUrl}}" ], "path": [ "api", "assignments", "3", "submit" ] } } }, { "name": "Get My Submission (Student)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/assignments/3/submissions/my", "host": [ "{{baseUrl}}" ], "path": [ "api", "assignments", "3", "submissions", "my" ] } } }, { "name": "List Submissions (Instructor)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" } ], "url": { "raw": "{{baseUrl}}/api/assignments/3/submissions", "host": [ "{{baseUrl}}" ], "path": [ "api", "assignments", "3", "submissions" ] } } }, { "name": "Grade Submission (Instructor)", "request": { "method": "PATCH", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"score\":85,\"feedback\":\"Well done! Consider improving the conclusion.\"}" }, "url": { "raw": "{{baseUrl}}/api/assignments/3/submissions/1/grade", "host": [ "{{baseUrl}}" ], "path": [ "api", "assignments", "3", "submissions", "1", "grade" ] } } }, { "name": "Role Guard Test - Create (Student=403)", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"courseId\":1,\"title\":\"Should Fail\"}" }, "url": { "raw": "{{baseUrl}}/api/assignments", "host": [ "{{baseUrl}}" ], "path": [ "api", "assignments" ] } } } ] }, { "name": "📊 Grades", "item": [ { "name": "List Grades (Admin)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/grades", "host": [ "{{baseUrl}}" ], "path": [ "api", "grades" ] } } }, { "name": "List Grades by Course", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/grades?courseId=1", "host": [ "{{baseUrl}}" ], "path": [ "api", "grades" ], "query": [ { "key": "courseId", "value": "1" } ] } } }, { "name": "My Grades (Student)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/grades/my", "host": [ "{{baseUrl}}" ], "path": [ "api", "grades", "my" ] } } }, { "name": "Get Transcript (Student)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/grades/transcript/57", "host": [ "{{baseUrl}}" ], "path": [ "api", "grades", "transcript", "57" ] } } }, { "name": "Calculate GPA (Student)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/grades/gpa/57", "host": [ "{{baseUrl}}" ], "path": [ "api", "grades", "gpa", "57" ] } } }, { "name": "Grade Distribution (Instructor)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" } ], "url": { "raw": "{{baseUrl}}/api/grades/distribution/1", "host": [ "{{baseUrl}}" ], "path": [ "api", "grades", "distribution", "1" ] } } }, { "name": "Role Guard Test - List Grades (Student=403)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/grades", "host": [ "{{baseUrl}}" ], "path": [ "api", "grades" ] } } } ] }, { "name": "📋 Rubrics", "item": [ { "name": "List Rubrics (Instructor)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" } ], "url": { "raw": "{{baseUrl}}/api/rubrics?courseId=1", "host": [ "{{baseUrl}}" ], "path": [ "api", "rubrics" ], "query": [ { "key": "courseId", "value": "1" } ] } } }, { "name": "Create Rubric (Instructor)", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"courseId\":1,\"rubricName\":\"Essay Grading Rubric\",\"description\":\"Rubric for evaluating research essays\",\"criteria\":\"[{\\\"name\\\":\\\"Content\\\",\\\"maxPoints\\\":40,\\\"description\\\":\\\"Quality of content\\\"},{\\\"name\\\":\\\"Grammar\\\",\\\"maxPoints\\\":30,\\\"description\\\":\\\"Writing quality\\\"},{\\\"name\\\":\\\"Format\\\",\\\"maxPoints\\\":30,\\\"description\\\":\\\"Proper formatting\\\"}]\",\"totalPoints\":100}" }, "url": { "raw": "{{baseUrl}}/api/rubrics", "host": [ "{{baseUrl}}" ], "path": [ "api", "rubrics" ] } } } ] }, { "name": "📁 Files & Folders", "item": [ { "name": "Search Files", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/files/search?name=test", "host": [ "{{baseUrl}}" ], "path": [ "api", "files", "search" ], "query": [ { "key": "name", "value": "test" } ] } } }, { "name": "Recent Files", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/files/recent", "host": [ "{{baseUrl}}" ], "path": [ "api", "files", "recent" ] } } }, { "name": "Shared Files", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/files/shared", "host": [ "{{baseUrl}}" ], "path": [ "api", "files", "shared" ] } } }, { "name": "Create Folder", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"folderName\":\"Lecture Notes\",\"courseId\":1}" }, "url": { "raw": "{{baseUrl}}/api/files/folders", "host": [ "{{baseUrl}}" ], "path": [ "api", "files", "folders" ] } } }, { "name": "Get Folder by ID", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/files/folders/1", "host": [ "{{baseUrl}}" ], "path": [ "api", "files", "folders", "1" ] } } }, { "name": "Get Folder Children", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/files/folders/1/children", "host": [ "{{baseUrl}}" ], "path": [ "api", "files", "folders", "1", "children" ] } } }, { "name": "Get Folder Tree", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/files/folders/1/tree", "host": [ "{{baseUrl}}" ], "path": [ "api", "files", "folders", "1", "tree" ] } } } ] }, { "name": "📋 Attendance", "item": [ { "name": "Create Session (Instructor)", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"sectionId\":11,\"sessionDate\":\"2026-03-02\",\"sessionType\":\"lecture\",\"startTime\":\"09:00:00\",\"endTime\":\"10:30:00\",\"location\":\"Room A101\",\"notes\":\"Week 1 intro lecture\"}" }, "url": { "raw": "{{baseUrl}}/attendance/sessions", "host": [ "{{baseUrl}}" ], "path": [ "attendance", "sessions" ] } } }, { "name": "List Sessions (Instructor)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" } ], "url": { "raw": "{{baseUrl}}/attendance/sessions", "host": [ "{{baseUrl}}" ], "path": [ "attendance", "sessions" ] } } }, { "name": "Get Session by ID", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" } ], "url": { "raw": "{{baseUrl}}/attendance/sessions/1", "host": [ "{{baseUrl}}" ], "path": [ "attendance", "sessions", "1" ] } } }, { "name": "Update Session (Instructor)", "request": { "method": "PUT", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"location\":\"Room B202\",\"notes\":\"Moved to new room\"}" }, "url": { "raw": "{{baseUrl}}/attendance/sessions/1", "host": [ "{{baseUrl}}" ], "path": [ "attendance", "sessions", "1" ] } } }, { "name": "Mark Attendance (Instructor)", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"sessionId\":1,\"userId\":57,\"attendanceStatus\":\"present\",\"notes\":\"On time\"}" }, "url": { "raw": "{{baseUrl}}/attendance/records", "host": [ "{{baseUrl}}" ], "path": [ "attendance", "records" ] } } }, { "name": "Batch Mark Attendance (Instructor)", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"sessionId\":1,\"records\":[{\"userId\":57,\"attendanceStatus\":\"present\"},{\"userId\":58,\"attendanceStatus\":\"absent\",\"notes\":\"No show\"}]}" }, "url": { "raw": "{{baseUrl}}/attendance/records/batch", "host": [ "{{baseUrl}}" ], "path": [ "attendance", "records", "batch" ] } } }, { "name": "Get Session Records (Instructor)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" } ], "url": { "raw": "{{baseUrl}}/attendance/sessions/1/records", "host": [ "{{baseUrl}}" ], "path": [ "attendance", "sessions", "1", "records" ] } } }, { "name": "Update Record (Instructor)", "request": { "method": "PUT", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"attendanceStatus\":\"late\",\"notes\":\"Arrived 10 min late\"}" }, "url": { "raw": "{{baseUrl}}/attendance/records/1", "host": [ "{{baseUrl}}" ], "path": [ "attendance", "records", "1" ] } } }, { "name": "My Attendance (Student)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/attendance/my", "host": [ "{{baseUrl}}" ], "path": [ "attendance", "my" ] } } }, { "name": "Attendance by Student (Instructor)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" } ], "url": { "raw": "{{baseUrl}}/attendance/by-student/57", "host": [ "{{baseUrl}}" ], "path": [ "attendance", "by-student", "57" ] } } }, { "name": "Attendance by Course (Instructor)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" } ], "url": { "raw": "{{baseUrl}}/attendance/by-course/1", "host": [ "{{baseUrl}}" ], "path": [ "attendance", "by-course", "1" ] } } }, { "name": "Attendance Summary (Instructor)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" } ], "url": { "raw": "{{baseUrl}}/attendance/summary/11", "host": [ "{{baseUrl}}" ], "path": [ "attendance", "summary", "11" ] } } }, { "name": "Attendance Trends (Instructor)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" } ], "url": { "raw": "{{baseUrl}}/attendance/trends/11", "host": [ "{{baseUrl}}" ], "path": [ "attendance", "trends", "11" ] } } }, { "name": "Attendance Report (Instructor)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" } ], "url": { "raw": "{{baseUrl}}/attendance/report/11", "host": [ "{{baseUrl}}" ], "path": [ "attendance", "report", "11" ] } } }, { "name": "Close Session (Instructor)", "request": { "method": "PATCH", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" } ], "url": { "raw": "{{baseUrl}}/attendance/sessions/1/close", "host": [ "{{baseUrl}}" ], "path": [ "attendance", "sessions", "1", "close" ] } } }, { "name": "Role Guard Test - Create Session (Student=403)", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"sectionId\":11,\"sessionDate\":\"2026-03-02\"}" }, "url": { "raw": "{{baseUrl}}/attendance/sessions", "host": [ "{{baseUrl}}" ], "path": [ "attendance", "sessions" ] } } } ] }, { "name": "📝 Quizzes", "item": [ { "name": "Create Quiz (Instructor)", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"courseId\": 1,\n \"title\": \"Midterm Quiz: Data Structures\",\n \"description\": \"Covers arrays, linked lists, and trees\",\n \"instructions\": \"Answer all questions. Time limit applies.\",\n \"quizType\": \"graded\",\n \"timeLimitMinutes\": 45,\n \"maxAttempts\": 2,\n \"passingScore\": 60,\n \"randomizeQuestions\": true,\n \"showCorrectAnswers\": true,\n \"showAnswersAfter\": \"after_due\",\n \"availableFrom\": \"2026-04-01T09:00:00Z\",\n \"availableUntil\": \"2026-04-15T23:59:59Z\",\n \"weight\": 15\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/quizzes", "host": [ "{{baseUrl}}" ], "path": [ "quizzes" ] } } }, { "name": "List Quizzes (Instructor)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" } ], "url": { "raw": "{{baseUrl}}/quizzes", "host": [ "{{baseUrl}}" ], "path": [ "quizzes" ] } } }, { "name": "Get Quiz by ID (Instructor)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" } ], "url": { "raw": "{{baseUrl}}/quizzes/1", "host": [ "{{baseUrl}}" ], "path": [ "quizzes", "1" ] } } }, { "name": "Update Quiz (Instructor)", "request": { "method": "PUT", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"title\":\"Updated Quiz Title\",\"timeLimitMinutes\":45}" }, "url": { "raw": "{{baseUrl}}/quizzes/1", "host": [ "{{baseUrl}}" ], "path": [ "quizzes", "1" ] } } }, { "name": "Change Quiz Status (Instructor)", "request": { "description": "Change quiz status: draft, published, closed, archived", "method": "PATCH", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"status\":\"published\"}" }, "url": { "raw": "{{baseUrl}}/quizzes/1/status", "host": [ "{{baseUrl}}" ], "path": [ "quizzes", "1", "status" ] } } }, { "name": "Get Difficulty Levels", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" } ], "url": { "raw": "{{baseUrl}}/quizzes/difficulty-levels", "host": [ "{{baseUrl}}" ], "path": [ "quizzes", "difficulty-levels" ] } } }, { "name": "Add Question (Instructor)", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"questionText\": \"What is the time complexity of binary search?\",\n \"questionType\": \"mcq\",\n \"options\": [\n \"O(1)\",\n \"O(log n)\",\n \"O(n)\",\n \"O(n log n)\"\n ],\n \"correctAnswer\": \"O(log n)\",\n \"explanation\": \"Binary search divides the search space in half each iteration\",\n \"points\": 10,\n \"difficultyLevelId\": 1,\n \"orderIndex\": 1\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/quizzes/1/questions", "host": [ "{{baseUrl}}" ], "path": [ "quizzes", "1", "questions" ] } } }, { "name": "Update Question (Instructor)", "request": { "method": "PUT", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"questionText\":\"Updated: What is the time complexity of binary search?\",\"points\":15}" }, "url": { "raw": "{{baseUrl}}/quizzes/1/questions/1", "host": [ "{{baseUrl}}" ], "path": [ "quizzes", "1", "questions", "1" ] } } }, { "name": "Reorder Questions (Instructor)", "request": { "method": "PUT", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"questionIds\": [\n 1,\n 2,\n 3,\n 4\n ]\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/quizzes/1/questions/reorder", "host": [ "{{baseUrl}}" ], "path": [ "quizzes", "1", "questions", "reorder" ] } } }, { "name": "Start Quiz Attempt (Student)", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/quizzes/9/attempts/start", "host": [ "{{baseUrl}}" ], "path": [ "quizzes", "9", "attempts", "start" ] } } }, { "name": "Get Attempt by ID (Student)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/quizzes/attempts/5", "host": [ "{{baseUrl}}" ], "path": [ "quizzes", "attempts", "5" ] } } }, { "name": "Submit Quiz Attempt (Student)", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"answers\": [\n {\n \"questionId\": 1,\n \"selectedOption\": [\n \"O(log n)\"\n ]\n },\n {\n \"questionId\": 2,\n \"selectedOption\": [\n \"true\"\n ]\n }\n ]\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/quizzes/attempts/5/submit", "host": [ "{{baseUrl}}" ], "path": [ "quizzes", "attempts", "5", "submit" ] } } }, { "name": "My Attempts (Student)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/quizzes/my-attempts", "host": [ "{{baseUrl}}" ], "path": [ "quizzes", "my-attempts" ] } } }, { "name": "List All Attempts (Instructor)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" } ], "url": { "raw": "{{baseUrl}}/quizzes/attempts", "host": [ "{{baseUrl}}" ], "path": [ "quizzes", "attempts" ] } } }, { "name": "Pending Grading (Instructor)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" } ], "url": { "raw": "{{baseUrl}}/quizzes/attempts/5/pending-grading", "host": [ "{{baseUrl}}" ], "path": [ "quizzes", "attempts", "5", "pending-grading" ] } } }, { "name": "Grade Attempt (Instructor)", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"grades\": [\n {\n \"answerId\": 1,\n \"pointsEarned\": 8,\n \"feedback\": \"Good answer\"\n },\n {\n \"answerId\": 2,\n \"pointsEarned\": 5,\n \"feedback\": \"Partially correct\"\n }\n ]\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/quizzes/attempts/5/grade", "host": [ "{{baseUrl}}" ], "path": [ "quizzes", "attempts", "5", "grade" ] } } }, { "name": "Quiz Statistics (Instructor)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" } ], "url": { "raw": "{{baseUrl}}/quizzes/1/statistics", "host": [ "{{baseUrl}}" ], "path": [ "quizzes", "1", "statistics" ] } } }, { "name": "Quiz Progress by Course (Student)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/quizzes/progress/course/1", "host": [ "{{baseUrl}}" ], "path": [ "quizzes", "progress", "course", "1" ] } } }, { "name": "Role Guard Test - Create Quiz (Student=403)", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"courseId\":1,\"title\":\"Should Fail\"}" }, "url": { "raw": "{{baseUrl}}/quizzes", "host": [ "{{baseUrl}}" ], "path": [ "quizzes" ] } } } ] }, { "name": "🧪 Labs", "item": [ { "name": "List Labs", "request": { "description": "List all labs. Supports ?courseId=1&status=published&page=1&limit=20", "auth": { "bearer": [ { "key": "token", "type": "string", "value": "{{instructor_token}}" } ], "type": "bearer" }, "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "path": [ "api", "labs" ], "raw": "{{baseUrl}}/api/labs", "host": [ "{{baseUrl}}" ] } } }, { "name": "Create Lab", "request": { "url": { "path": [ "api", "labs" ], "raw": "{{baseUrl}}/api/labs", "host": [ "{{baseUrl}}" ] }, "description": "Create a new lab. Roles: Instructor, TA, Admin", "method": "POST", "auth": { "bearer": [ { "key": "token", "type": "string", "value": "{{instructor_token}}" } ], "type": "bearer" }, "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "raw": "{\r\n \"maxScore\": 100,\r\n \"labNumber\": 1,\r\n \"dueDate\": \"2026-04-01T23:59:59Z\",\r\n \"title\": \"Data Structures Lab 1\",\r\n \"description\": \"Binary tree traversal lab\",\r\n \"availableFrom\": \"2026-03-01T00:00:00Z\",\r\n \"weight\": 10,\r\n \"courseId\": 1,\r\n \"status\": \"published\"\r\n}", "mode": "raw" } } }, { "name": "Get Lab by ID", "request": { "description": "Get lab details with instructions", "auth": { "bearer": [ { "key": "token", "type": "string", "value": "{{instructor_token}}" } ], "type": "bearer" }, "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "path": [ "api", "labs", "1" ], "raw": "{{baseUrl}}/api/labs/1", "host": [ "{{baseUrl}}" ] } } }, { "name": "Update Lab", "request": { "url": { "path": [ "api", "labs", "1" ], "raw": "{{baseUrl}}/api/labs/1", "host": [ "{{baseUrl}}" ] }, "description": "Update lab. Roles: Instructor, TA, Admin", "method": "PUT", "auth": { "bearer": [ { "key": "token", "type": "string", "value": "{{instructor_token}}" } ], "type": "bearer" }, "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "raw": "{\r\n \"description\": \"Updated description\",\r\n \"maxScore\": 120,\r\n \"title\": \"Data Structures Lab 1 (Updated)\"\r\n}", "mode": "raw" } } }, { "name": "Delete Lab", "request": { "description": "Delete a lab. Roles: Instructor, Admin", "auth": { "bearer": [ { "key": "token", "type": "string", "value": "{{instructor_token}}" } ], "type": "bearer" }, "method": "DELETE", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "path": [ "api", "labs", "1" ], "raw": "{{baseUrl}}/api/labs/1", "host": [ "{{baseUrl}}" ] } } }, { "name": "Change Lab Status", "request": { "description": "Change lab status: draft, published, closed, archived. Roles: Instructor, TA, Admin", "auth": { "bearer": [ { "key": "token", "type": "string", "value": "{{instructor_token}}" } ], "type": "bearer" }, "method": "PATCH", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"status\":\"published\"}" }, "url": { "path": [ "api", "labs", "1", "status" ], "raw": "{{baseUrl}}/api/labs/1/status", "host": [ "{{baseUrl}}" ] } } }, { "name": "Get Instructions", "request": { "description": "Get all instructions for a lab", "auth": { "bearer": [ { "key": "token", "type": "string", "value": "{{student_token}}" } ], "type": "bearer" }, "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "path": [ "api", "labs", "1", "instructions" ], "raw": "{{baseUrl}}/api/labs/1/instructions", "host": [ "{{baseUrl}}" ] } } }, { "name": "Add Instruction", "request": { "url": { "path": [ "api", "labs", "1", "instructions" ], "raw": "{{baseUrl}}/api/labs/1/instructions", "host": [ "{{baseUrl}}" ] }, "description": "Add instruction to lab. Roles: Instructor, TA", "method": "POST", "auth": { "bearer": [ { "key": "token", "type": "string", "value": "{{instructor_token}}" } ], "type": "bearer" }, "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "raw": "{\r\n \"instructionText\": \"Step 1: Implement the binary tree node class\",\r\n \"orderIndex\": 1\r\n}", "mode": "raw" } } }, { "name": "Submit Lab (Student)", "request": { "url": { "path": [ "api", "labs", "1", "submit" ], "raw": "{{baseUrl}}/api/labs/1/submit", "host": [ "{{baseUrl}}" ] }, "description": "Submit lab work. Role: Student only", "method": "POST", "auth": { "bearer": [ { "key": "token", "type": "string", "value": "{{student_token}}" } ], "type": "bearer" }, "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "raw": "{\r\n \"submissionText\": \"My binary tree implementation with inorder, preorder, and postorder traversals.\"\r\n}", "mode": "raw" } } }, { "name": "Get My Submission", "request": { "description": "Get student's own submission. Role: Student", "auth": { "bearer": [ { "key": "token", "type": "string", "value": "{{student_token}}" } ], "type": "bearer" }, "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "path": [ "api", "labs", "1", "submissions", "my" ], "raw": "{{baseUrl}}/api/labs/1/submissions/my", "host": [ "{{baseUrl}}" ] } } }, { "name": "Get All Submissions", "request": { "description": "List all submissions. Roles: Instructor, TA, Admin", "auth": { "bearer": [ { "key": "token", "type": "string", "value": "{{instructor_token}}" } ], "type": "bearer" }, "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "path": [ "api", "labs", "1", "submissions" ], "raw": "{{baseUrl}}/api/labs/1/submissions", "host": [ "{{baseUrl}}" ] } } }, { "name": "Grade Submission", "request": { "url": { "path": [ "api", "labs", "1", "submissions", "1", "grade" ], "raw": "{{baseUrl}}/api/labs/1/submissions/1/grade", "host": [ "{{baseUrl}}" ] }, "description": "Grade a submission. Roles: Instructor, TA", "method": "PATCH", "auth": { "bearer": [ { "key": "token", "type": "string", "value": "{{instructor_token}}" } ], "type": "bearer" }, "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "raw": "{\r\n \"status\": \"graded\"\r\n}", "mode": "raw" } } }, { "name": "Mark Attendance", "request": { "url": { "path": [ "api", "labs", "1", "attendance" ], "raw": "{{baseUrl}}/api/labs/1/attendance", "host": [ "{{baseUrl}}" ] }, "description": "Mark student attendance. Roles: Instructor, TA", "method": "POST", "auth": { "bearer": [ { "key": "token", "type": "string", "value": "{{instructor_token}}" } ], "type": "bearer" }, "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "raw": "{\r\n \"notes\": \"On time\",\r\n \"attendanceStatus\": \"present\",\r\n \"userId\": 57\r\n}", "mode": "raw" } } }, { "name": "Get Attendance", "request": { "description": "Get attendance records. Roles: Instructor, TA, Admin", "auth": { "bearer": [ { "key": "token", "type": "string", "value": "{{instructor_token}}" } ], "type": "bearer" }, "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "path": [ "api", "labs", "1", "attendance" ], "raw": "{{baseUrl}}/api/labs/1/attendance", "host": [ "{{baseUrl}}" ] } } } ] }, { "name": "🔔 Notifications", "item": [ { "name": "List Notifications", "request": { "description": "List notifications. Supports ?type=announcement&priority=high&isRead=false&page=1&limit=20", "auth": { "bearer": [ { "key": "token", "type": "string", "value": "{{student_token}}" } ], "type": "bearer" }, "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "path": [ "api", "notifications" ], "raw": "{{baseUrl}}/api/notifications", "host": [ "{{baseUrl}}" ] } } }, { "name": "Unread Count", "request": { "description": "Get count of unread notifications", "auth": { "bearer": [ { "key": "token", "type": "string", "value": "{{student_token}}" } ], "type": "bearer" }, "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "path": [ "api", "notifications", "unread-count" ], "raw": "{{baseUrl}}/api/notifications/unread-count", "host": [ "{{baseUrl}}" ] } } }, { "name": "Send Notification (Admin)", "request": { "url": { "path": [ "api", "notifications", "send" ], "raw": "{{baseUrl}}/api/notifications/send", "host": [ "{{baseUrl}}" ] }, "description": "Send notification to users. Roles: Admin, IT Admin", "method": "POST", "auth": { "bearer": [ { "key": "token", "type": "string", "value": "{{admin_token}}" } ], "type": "bearer" }, "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "raw": "{\r\n \"title\": \"Important Announcement\",\r\n \"body\": \"All students must submit assignments by Friday\",\r\n \"priority\": \"high\",\r\n \"notificationType\": \"announcement\",\r\n \"userIds\": [\r\n 57,\r\n 58\r\n ],\r\n \"actionUrl\": \"/assignments\"\r\n}", "mode": "raw" } } }, { "name": "Mark as Read", "request": { "description": "Mark a single notification as read", "auth": { "bearer": [ { "key": "token", "type": "string", "value": "{{student_token}}" } ], "type": "bearer" }, "method": "PATCH", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "path": [ "api", "notifications", "1", "read" ], "raw": "{{baseUrl}}/api/notifications/1/read", "host": [ "{{baseUrl}}" ] } } }, { "name": "Mark All as Read", "request": { "description": "Mark all notifications as read", "auth": { "bearer": [ { "key": "token", "type": "string", "value": "{{student_token}}" } ], "type": "bearer" }, "method": "PATCH", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "path": [ "api", "notifications", "read-all" ], "raw": "{{baseUrl}}/api/notifications/read-all", "host": [ "{{baseUrl}}" ] } } }, { "name": "Delete Notification", "request": { "description": "Delete a single notification", "auth": { "bearer": [ { "key": "token", "type": "string", "value": "{{student_token}}" } ], "type": "bearer" }, "method": "DELETE", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "path": [ "api", "notifications", "1" ], "raw": "{{baseUrl}}/api/notifications/1", "host": [ "{{baseUrl}}" ] } } }, { "name": "Clear All Notifications", "request": { "description": "Delete all notifications for current user", "auth": { "bearer": [ { "key": "token", "type": "string", "value": "{{student_token}}" } ], "type": "bearer" }, "method": "DELETE", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "path": [ "api", "notifications", "clear-all" ], "raw": "{{baseUrl}}/api/notifications/clear-all", "host": [ "{{baseUrl}}" ] } } }, { "name": "Get Preferences", "request": { "description": "Get notification preferences. Creates defaults if none exist", "auth": { "bearer": [ { "key": "token", "type": "string", "value": "{{student_token}}" } ], "type": "bearer" }, "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "path": [ "api", "notifications", "preferences" ], "raw": "{{baseUrl}}/api/notifications/preferences", "host": [ "{{baseUrl}}" ] } } }, { "name": "Update Preferences", "request": { "url": { "path": [ "api", "notifications", "preferences" ], "raw": "{{baseUrl}}/api/notifications/preferences", "host": [ "{{baseUrl}}" ] }, "description": "Update notification preferences", "method": "PUT", "auth": { "bearer": [ { "key": "token", "type": "string", "value": "{{student_token}}" } ], "type": "bearer" }, "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "raw": "{\r\n \"pushEnabled\": false,\r\n \"gradeEmail\": true,\r\n \"assignmentEmail\": true,\r\n \"announcementEmail\": true,\r\n \"emailEnabled\": true,\r\n \"messageEmail\": false,\r\n \"deadlineReminderDays\": 3,\r\n \"smsEnabled\": false\r\n}", "mode": "raw" } } } ] }, { "item": [ { "request": { "body": { "raw": "{\"participantIds\": [58], \"text\": \"Hi professor, I have a question about the midterm format.\", \"type\": \"direct\"}", "mode": "raw" }, "url": { "host": [ "{{baseUrl}}" ], "raw": "{{baseUrl}}/api/messages/conversations", "path": [ "api", "messages", "conversations" ] }, "method": "POST", "header": [ { "key": "Authorization", "type": "text", "value": "Bearer {{student_token}}" }, { "key": "Content-Type", "type": "text", "value": "application/json" } ] }, "name": "Start Direct Conversation" }, { "request": { "body": { "raw": "{\"participantIds\": [57, 60], \"text\": \"Welcome to our project discussion group!\", \"type\": \"group\", \"groupName\": \"CS201 Project Team\"}", "mode": "raw" }, "url": { "host": [ "{{baseUrl}}" ], "raw": "{{baseUrl}}/api/messages/conversations", "path": [ "api", "messages", "conversations" ] }, "method": "POST", "header": [ { "key": "Authorization", "type": "text", "value": "Bearer {{instructor_token}}" }, { "key": "Content-Type", "type": "text", "value": "application/json" } ] }, "name": "Start Group Conversation" }, { "request": { "url": { "host": [ "{{baseUrl}}" ], "raw": "{{baseUrl}}/api/messages/conversations", "query": [], "path": [ "api", "messages", "conversations" ] }, "method": "GET", "header": [ { "key": "Authorization", "type": "text", "value": "Bearer {{student_token}}" } ] }, "name": "List My Conversations" }, { "request": { "url": { "host": [ "{{baseUrl}}" ], "raw": "{{baseUrl}}/api/messages/conversations/6?page=1&limit=50", "query": [ { "key": "page", "value": "1" }, { "key": "limit", "value": "50" } ], "path": [ "api", "messages", "conversations", "6" ] }, "method": "GET", "header": [ { "key": "Authorization", "type": "text", "value": "Bearer {{student_token}}" } ] }, "name": "Get Conversation Messages" }, { "request": { "body": { "raw": "{\"text\": \"The midterm will be multiple choice and short answer. Focus on chapters 3-8.\"}", "mode": "raw" }, "url": { "host": [ "{{baseUrl}}" ], "raw": "{{baseUrl}}/api/messages/conversations/6", "path": [ "api", "messages", "conversations", "6" ] }, "method": "POST", "header": [ { "key": "Authorization", "type": "text", "value": "Bearer {{instructor_token}}" }, { "key": "Content-Type", "type": "text", "value": "application/json" } ] }, "name": "Send Message in Conversation" }, { "request": { "body": { "raw": "{\"text\": \"Here is my draft for review\", \"fileId\": 1}", "mode": "raw" }, "url": { "host": [ "{{baseUrl}}" ], "raw": "{{baseUrl}}/api/messages/conversations/6", "path": [ "api", "messages", "conversations", "6" ] }, "method": "POST", "header": [ { "key": "Authorization", "type": "text", "value": "Bearer {{student_token}}" }, { "key": "Content-Type", "type": "text", "value": "application/json" } ] }, "name": "Send Message with File" }, { "request": { "url": { "host": [ "{{baseUrl}}" ], "raw": "{{baseUrl}}/api/messages/6/read", "path": [ "api", "messages", "6", "read" ] }, "method": "PATCH", "header": [ { "key": "Authorization", "type": "text", "value": "Bearer {{student_token}}" } ] }, "name": "Mark Message as Read" }, { "request": { "description": "Soft-deletes a message for the current user only. Use DELETE /api/messages/{messageId}", "url": { "host": [ "{{baseUrl}}" ], "raw": "{{baseUrl}}/api/messages/8", "path": [ "api", "messages", "8" ] }, "method": "DELETE", "header": [ { "key": "Authorization", "type": "text", "value": "Bearer {{student_token}}" } ] }, "name": "Delete Message For Me" }, { "request": { "description": "Deletes a message for all participants. Only the sender can use this.", "url": { "host": [ "{{baseUrl}}" ], "raw": "{{baseUrl}}/api/messages/9/everyone", "path": [ "api", "messages", "9", "everyone" ] }, "method": "DELETE", "header": [ { "key": "Authorization", "type": "text", "value": "Bearer {{student_token}}" } ] }, "name": "Delete Message For Everyone" }, { "request": { "url": { "host": [ "{{baseUrl}}" ], "raw": "{{baseUrl}}/api/messages/unread-count", "query": [], "path": [ "api", "messages", "unread-count" ] }, "method": "GET", "header": [ { "key": "Authorization", "type": "text", "value": "Bearer {{student_token}}" } ] }, "name": "Get Unread Count" }, { "request": { "url": { "host": [ "{{baseUrl}}" ], "raw": "{{baseUrl}}/api/messages/search", "query": [ { "key": "page", "value": "1" }, { "key": "limit", "value": "20" }, { "key": "query", "value": "midterm" } ], "path": [ "api", "messages", "search" ] }, "method": "GET", "header": [ { "key": "Authorization", "type": "text", "value": "Bearer {{student_token}}" } ] }, "name": "Search Messages" }, { "request": { "url": { "host": [ "{{baseUrl}}" ], "raw": "{{baseUrl}}/api/messages/online-users", "query": [], "path": [ "api", "messages", "online-users" ] }, "method": "GET", "header": [ { "key": "Authorization", "type": "text", "value": "Bearer {{student_token}}" } ] }, "name": "Get Online Users" } ], "name": "💬 Messaging", "description": "WhatsApp-like real-time messaging. Supports direct conversations, group chats, file attachments, read receipts, delete-for-me, delete-for-everyone, and search. WebSocket: connect to /messaging namespace with JWT token." }, { "item": [ { "request": { "body": { "raw": "{\"courseId\": 1, \"title\": \"Tips for Final Project - Data Structures\", \"description\": \"What data structures would you recommend for implementing the graph traversal module?\"}", "mode": "raw" }, "url": { "host": [ "{{baseUrl}}" ], "raw": "{{baseUrl}}/api/discussions", "path": [ "api", "discussions" ] }, "method": "POST", "header": [ { "key": "Authorization", "type": "text", "value": "Bearer {{student_token}}" }, { "key": "Content-Type", "type": "text", "value": "application/json" } ] }, "name": "Create Discussion Thread" }, { "request": { "url": { "host": [ "{{baseUrl}}" ], "raw": "{{baseUrl}}/api/discussions", "query": [ { "key": "page", "value": "1" }, { "key": "courseId", "value": "1" }, { "key": "limit", "value": "20" } ], "path": [ "api", "discussions" ] }, "method": "GET", "header": [ { "key": "Authorization", "type": "text", "value": "Bearer {{student_token}}" } ] }, "name": "List Discussion Threads" }, { "request": { "url": { "host": [ "{{baseUrl}}" ], "raw": "{{baseUrl}}/api/discussions/6?page=1&limit=50", "query": [ { "key": "page", "value": "1" }, { "key": "limit", "value": "50" } ], "path": [ "api", "discussions", "6" ] }, "method": "GET", "header": [ { "key": "Authorization", "type": "text", "value": "Bearer {{student_token}}" } ] }, "name": "Get Thread with Replies" }, { "request": { "body": { "raw": "{\"title\": \"Tips for Final Project - Data Structures & Algorithms\", \"description\": \"Updated: Including both data structures and algorithm choices for the graph module.\"}", "mode": "raw" }, "url": { "host": [ "{{baseUrl}}" ], "raw": "{{baseUrl}}/api/discussions/6", "path": [ "api", "discussions", "6" ] }, "method": "PUT", "header": [ { "key": "Authorization", "type": "text", "value": "Bearer {{student_token}}" }, { "key": "Content-Type", "type": "text", "value": "application/json" } ] }, "name": "Update Discussion Thread" }, { "request": { "body": { "raw": "{\"messageText\": \"I recommend using an adjacency list for sparse graphs and a matrix for dense ones. BFS is optimal for shortest path.\"}", "mode": "raw" }, "url": { "host": [ "{{baseUrl}}" ], "raw": "{{baseUrl}}/api/discussions/6/reply", "path": [ "api", "discussions", "6", "reply" ] }, "method": "POST", "header": [ { "key": "Authorization", "type": "text", "value": "Bearer {{instructor_token}}" }, { "key": "Content-Type", "type": "text", "value": "application/json" } ] }, "name": "Post Reply to Thread" }, { "request": { "body": { "raw": "{\"messageText\": \"Would a priority queue help with Dijkstras implementation?\", \"parentMessageId\": 11}", "mode": "raw" }, "url": { "host": [ "{{baseUrl}}" ], "raw": "{{baseUrl}}/api/discussions/6/reply", "path": [ "api", "discussions", "6", "reply" ] }, "method": "POST", "header": [ { "key": "Authorization", "type": "text", "value": "Bearer {{student_token}}" }, { "key": "Content-Type", "type": "text", "value": "application/json" } ] }, "name": "Post Nested Reply" }, { "request": { "url": { "host": [ "{{baseUrl}}" ], "raw": "{{baseUrl}}/api/discussions/6/pin", "path": [ "api", "discussions", "6", "pin" ] }, "method": "PATCH", "header": [ { "key": "Authorization", "type": "text", "value": "Bearer {{instructor_token}}" } ] }, "name": "Toggle Pin Thread (Instructor/Admin)" }, { "request": { "url": { "host": [ "{{baseUrl}}" ], "raw": "{{baseUrl}}/api/discussions/6/lock", "path": [ "api", "discussions", "6", "lock" ] }, "method": "PATCH", "header": [ { "key": "Authorization", "type": "text", "value": "Bearer {{instructor_token}}" } ] }, "name": "Toggle Lock Thread (Instructor/Admin)" }, { "request": { "url": { "host": [ "{{baseUrl}}" ], "raw": "{{baseUrl}}/api/discussions/replies/11/mark-answer", "path": [ "api", "discussions", "replies", "11", "mark-answer" ] }, "method": "PATCH", "header": [ { "key": "Authorization", "type": "text", "value": "Bearer {{instructor_token}}" } ] }, "name": "Mark Reply as Answer (Instructor/TA)" }, { "request": { "url": { "host": [ "{{baseUrl}}" ], "raw": "{{baseUrl}}/api/discussions/replies/11/endorse", "path": [ "api", "discussions", "replies", "11", "endorse" ] }, "method": "PATCH", "header": [ { "key": "Authorization", "type": "text", "value": "Bearer {{instructor_token}}" } ] }, "name": "Endorse Reply (Instructor/TA)" }, { "request": { "url": { "host": [ "{{baseUrl}}" ], "raw": "{{baseUrl}}/api/discussions/7", "path": [ "api", "discussions", "7" ] }, "method": "DELETE", "header": [ { "key": "Authorization", "type": "text", "value": "Bearer {{instructor_token}}" } ] }, "name": "Delete Discussion Thread (Instructor/Admin)" } ], "name": "💭 Discussions", "description": "Course discussion forums. Create threads, post replies (flat and nested), pin/lock threads, mark answers, and endorse replies." }, { "item": [ { "event": [ { "script": { "exec": [ "pm.test('Status code is 200', function () {", " pm.response.to.have.status(200);", "});", "pm.test('Response has data and meta', function () {", " var jsonData = pm.response.json();", " pm.expect(jsonData).to.have.property('data');", " pm.expect(jsonData).to.have.property('meta');", "});" ], "type": "text/javascript" }, "listen": "test" } ], "request": { "url": { "path": [ "api", "announcements" ], "raw": "{{baseUrl}}/api/announcements", "host": [ "{{baseUrl}}" ] }, "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "method": "GET" }, "name": "List Announcements (All Roles)" }, { "event": [ { "script": { "exec": [ "pm.test('Status code is 201', function () {", " pm.response.to.have.status(201);", "});", "pm.test('Response has id', function () {", " var jsonData = pm.response.json();", " pm.expect(jsonData).to.have.property('id');", " pm.collectionVariables.set('announcement_id', jsonData.id);", "});" ], "type": "text/javascript" }, "listen": "test" } ], "request": { "url": { "path": [ "api", "announcements" ], "raw": "{{baseUrl}}/api/announcements", "host": [ "{{baseUrl}}" ] }, "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"title\":\"Test Announcement\",\"content\":\"This is a test announcement from instructor\",\"announcementType\":\"course\",\"courseId\":1,\"priority\":\"medium\",\"isPublished\":false}" }, "method": "POST" }, "name": "Create Announcement (Instructor)" }, { "event": [ { "script": { "exec": [ "pm.test('Status code is 403 Forbidden', function () {", " pm.response.to.have.status(403);", "});" ], "type": "text/javascript" }, "listen": "test" } ], "request": { "url": { "path": [ "api", "announcements" ], "raw": "{{baseUrl}}/api/announcements", "host": [ "{{baseUrl}}" ] }, "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"title\":\"Student Test\",\"content\":\"Students should not create announcements\",\"announcementType\":\"course\",\"courseId\":1}" }, "method": "POST" }, "name": "Create Announcement (Student - Should Fail)" }, { "event": [ { "script": { "exec": [ "pm.test('Status code is 200', function () {", " pm.response.to.have.status(200);", "});", "pm.test('Response has announcement fields', function () {", " var jsonData = pm.response.json();", " pm.expect(jsonData).to.have.property('title');", " pm.expect(jsonData).to.have.property('content');", "});" ], "type": "text/javascript" }, "listen": "test" } ], "request": { "url": { "path": [ "api", "announcements", "1" ], "raw": "{{baseUrl}}/api/announcements/1", "host": [ "{{baseUrl}}" ] }, "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "method": "GET" }, "name": "Get Announcement by ID" }, { "event": [ { "script": { "exec": [ "pm.test('Status code is 200', function () {", " pm.response.to.have.status(200);", "});" ], "type": "text/javascript" }, "listen": "test" } ], "request": { "url": { "path": [ "api", "announcements", "{{announcement_id}}" ], "raw": "{{baseUrl}}/api/announcements/{{announcement_id}}", "host": [ "{{baseUrl}}" ] }, "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"title\":\"Updated Announcement Title\",\"content\":\"Updated content\"}" }, "method": "PUT" }, "name": "Update Announcement (Owner)" }, { "event": [ { "script": { "exec": [ "pm.test('Status code is 200', function () {", " pm.response.to.have.status(200);", "});", "pm.test('Announcement is published', function () {", " var jsonData = pm.response.json();", " pm.expect(jsonData.isPublished).to.be.true;", "});" ], "type": "text/javascript" }, "listen": "test" } ], "request": { "url": { "path": [ "api", "announcements", "{{announcement_id}}", "publish" ], "raw": "{{baseUrl}}/api/announcements/{{announcement_id}}/publish", "host": [ "{{baseUrl}}" ] }, "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" } ], "method": "PATCH" }, "name": "Publish Announcement" }, { "event": [ { "script": { "exec": [ "pm.test('Status code is 200', function () {", " pm.response.to.have.status(200);", "});" ], "type": "text/javascript" }, "listen": "test" } ], "request": { "url": { "path": [ "api", "announcements", "{{announcement_id}}", "schedule" ], "raw": "{{baseUrl}}/api/announcements/{{announcement_id}}/schedule", "host": [ "{{baseUrl}}" ] }, "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\"scheduledAt\":\"2026-12-31T10:00:00.000Z\"}" }, "method": "PATCH" }, "name": "Schedule Announcement" }, { "event": [ { "script": { "exec": [ "pm.test('Status code is 200', function () {", " pm.response.to.have.status(200);", "});", "pm.test('Response has viewCount', function () {", " var jsonData = pm.response.json();", " pm.expect(jsonData).to.have.property('viewCount');", "});" ], "type": "text/javascript" }, "listen": "test" } ], "request": { "url": { "path": [ "api", "announcements", "1", "analytics" ], "raw": "{{baseUrl}}/api/announcements/1/analytics", "host": [ "{{baseUrl}}" ] }, "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" } ], "method": "GET" }, "name": "Get Announcement Analytics" }, { "event": [ { "script": { "exec": [ "pm.test('Status code is 200', function () {", " pm.response.to.have.status(200);", "});" ], "type": "text/javascript" }, "listen": "test" } ], "request": { "url": { "path": [ "api", "announcements", "{{announcement_id}}" ], "raw": "{{baseUrl}}/api/announcements/{{announcement_id}}", "host": [ "{{baseUrl}}" ] }, "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "method": "DELETE" }, "name": "Delete Announcement" } ], "description": "Course, department, and system-wide announcements with scheduling and targeting. Role-based filtering: Admin sees all, Instructor/TA sees their courses, Students see published announcements for enrolled courses.", "name": "📢 Announcements" }, { "item": [ { "name": "List Communities", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/community/communities", "host": [ "{{baseUrl}}" ], "path": [ "api", "community", "communities" ] } }, "response": [] }, { "name": "Create Community (Admin)", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" }, { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/community/communities", "host": [ "{{baseUrl}}" ], "path": [ "api", "community", "communities" ] }, "body": { "mode": "raw", "raw": "{\"name\":\"Math Cohort 2027\",\"description\":\"Mathematics dept community\",\"communityType\":\"department\",\"departmentId\":2}" } }, "response": [] }, { "name": "Get Community Details", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/community/communities/1", "host": [ "{{baseUrl}}" ], "path": [ "api", "community", "communities", "1" ] } }, "response": [] }, { "name": "Update Community", "request": { "method": "PUT", "header": [ { "key": "Content-Type", "value": "application/json" }, { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/community/communities/2", "host": [ "{{baseUrl}}" ], "path": [ "api", "community", "communities", "2" ] }, "body": { "mode": "raw", "raw": "{\"description\":\"Updated description\"}" } }, "response": [] }, { "name": "List Community Posts", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/community/communities/1/posts", "host": [ "{{baseUrl}}" ], "path": [ "api", "community", "communities", "1", "posts" ] } }, "response": [] }, { "name": "Create Post in Community", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" }, { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/community/communities/1/posts", "host": [ "{{baseUrl}}" ], "path": [ "api", "community", "communities", "1", "posts" ] }, "body": { "mode": "raw", "raw": "{\"communityId\":1,\"title\":\"Test Post\",\"content\":\"Testing community posts\",\"postType\":\"discussion\",\"tags\":[\"study-tips\",\"general\"]}" } }, "response": [] }, { "name": "Get Global Posts", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/community/global", "host": [ "{{baseUrl}}" ], "path": [ "api", "community", "global" ] } }, "response": [] }, { "name": "Get Global Posts by Tag", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/community/global?tag=study-tips", "host": [ "{{baseUrl}}" ], "path": [ "api", "community", "global" ], "query": [ { "key": "tag", "value": "study-tips" } ] } }, "response": [] }, { "name": "Create Global Post", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" }, { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/community/global/posts", "host": [ "{{baseUrl}}" ], "path": [ "api", "community", "global", "posts" ] }, "body": { "mode": "raw", "raw": "{\"title\":\"Global Discussion\",\"content\":\"A global community post\",\"postType\":\"discussion\"}" } }, "response": [] }, { "name": "List Department Communities", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/community/department/2", "host": [ "{{baseUrl}}" ], "path": [ "api", "community", "department", "2" ] } }, "response": [] }, { "name": "My Departments", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/community/my-departments", "host": [ "{{baseUrl}}" ], "path": [ "api", "community", "my-departments" ] } }, "response": [] }, { "name": "List Tags", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/community/tags", "host": [ "{{baseUrl}}" ], "path": [ "api", "community", "tags" ] } }, "response": [] }, { "name": "Create Tag", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" }, { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/community/tags", "host": [ "{{baseUrl}}" ], "path": [ "api", "community", "tags" ] }, "body": { "mode": "raw", "raw": "{\"name\":\"study-tips\"}" } }, "response": [] }, { "name": "Get Post by ID", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/community/posts/1", "host": [ "{{baseUrl}}" ], "path": [ "api", "community", "posts", "1" ] } }, "response": [] }, { "name": "Add Comment to Post", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" }, { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/community/posts/1/comments", "host": [ "{{baseUrl}}" ], "path": [ "api", "community", "posts", "1", "comments" ] }, "body": { "mode": "raw", "raw": "{\"content\":\"Great post!\"}" } }, "response": [] }, { "name": "Toggle Reaction", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" }, { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/community/posts/1/reactions", "host": [ "{{baseUrl}}" ], "path": [ "api", "community", "posts", "1", "reactions" ] }, "body": { "mode": "raw", "raw": "{\"reactionType\":\"like\"}" } }, "response": [] }, { "name": "Delete Post", "request": { "method": "DELETE", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/community/posts/1", "host": [ "{{baseUrl}}" ], "path": [ "api", "community", "posts", "1" ] } }, "response": [] } ], "description": "Community management with communities, posts, comments, reactions, tags, and global feed. Supports department-based and custom communities with tagging system.", "name": "🌐 Community" }, { "name": "📅 Schedule", "description": "Personal schedule views with daily/weekly aggregation of classes, exams, and events.", "item": [ { "name": "Get Daily Schedule", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/schedule/my/daily", "host": [ "{{baseUrl}}" ], "path": [ "api", "schedule", "my", "daily" ] } }, "event": [ { "listen": "test", "script": { "exec": [ "pm.test('Status code is 200', function () {", " pm.response.to.have.status(200);", "});", "pm.test('Response has correct structure', function () {", " var jsonData = pm.response.json();", " pm.expect(jsonData).to.have.property('date');", " pm.expect(jsonData).to.have.property('dayOfWeek');", " pm.expect(jsonData).to.have.property('schedules');", " pm.expect(jsonData).to.have.property('events');", " pm.expect(jsonData).to.have.property('exams');", "});" ], "type": "text/javascript" } } ] }, { "name": "Get Weekly Schedule", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/schedule/my/weekly", "host": [ "{{baseUrl}}" ], "path": [ "api", "schedule", "my", "weekly" ] } }, "event": [ { "listen": "test", "script": { "exec": [ "pm.test('Status code is 200', function () {", " pm.response.to.have.status(200);", "});", "pm.test('Response has week structure', function () {", " var jsonData = pm.response.json();", " pm.expect(jsonData).to.have.property('weekStart');", " pm.expect(jsonData).to.have.property('weekEnd');", " pm.expect(jsonData).to.have.property('days');", " pm.expect(jsonData.days).to.be.an('array').with.lengthOf(7);", "});" ], "type": "text/javascript" } } ] }, { "name": "Get Section Schedule", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" } ], "url": { "raw": "{{baseUrl}}/api/schedule/section/1", "host": [ "{{baseUrl}}" ], "path": [ "api", "schedule", "section", "1" ] } }, "event": [ { "listen": "test", "script": { "exec": [ "pm.test('Status code is 200', function () {", " pm.response.to.have.status(200);", "});", "pm.test('Response is array', function () {", " var jsonData = pm.response.json();", " pm.expect(jsonData).to.be.an('array');", "});" ], "type": "text/javascript" } } ] }, { "name": "Get Academic Calendar", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/schedule/academic", "host": [ "{{baseUrl}}" ], "path": [ "api", "schedule", "academic" ] } }, "event": [ { "listen": "test", "script": { "exec": [ "pm.test('Status code is 200', function () {", " pm.response.to.have.status(200);", "});", "pm.test('Response has events and exams', function () {", " var jsonData = pm.response.json();", " pm.expect(jsonData).to.have.property('events');", " pm.expect(jsonData).to.have.property('exams');", "});" ], "type": "text/javascript" } } ] } ] }, { "name": "📝 Exam Schedules", "description": "Exam scheduling management with conflict detection.", "item": [ { "name": "List Exam Schedules", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/exams/schedule", "host": [ "{{baseUrl}}" ], "path": [ "api", "exams", "schedule" ] } }, "event": [ { "listen": "test", "script": { "exec": [ "pm.test('Status code is 200', function () {", " pm.response.to.have.status(200);", "});", "pm.test('Response has pagination', function () {", " var jsonData = pm.response.json();", " pm.expect(jsonData).to.have.property('data');", " pm.expect(jsonData).to.have.property('meta');", "});" ], "type": "text/javascript" } } ] }, { "name": "Create Exam Schedule (Instructor)", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"courseId\": 1,\n \"semesterId\": 2,\n \"examType\": \"midterm\",\n \"examDate\": \"2026-04-15\",\n \"startTime\": \"10:00:00\",\n \"durationMinutes\": 120,\n \"location\": \"Exam Hall A\",\n \"instructions\": \"Bring student ID and calculator\"\n}" }, "url": { "raw": "{{baseUrl}}/api/exams/schedule", "host": [ "{{baseUrl}}" ], "path": [ "api", "exams", "schedule" ] } }, "event": [ { "listen": "test", "script": { "exec": [ "pm.test('Status code is 201', function () {", " pm.response.to.have.status(201);", "});", "pm.test('Response has exam ID', function () {", " var jsonData = pm.response.json();", " pm.expect(jsonData).to.have.property('examId');", " pm.collectionVariables.set('exam_id', jsonData.examId);", "});" ], "type": "text/javascript" } } ] }, { "name": "Get Exam Schedule by ID", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/exams/schedule/{{exam_id}}", "host": [ "{{baseUrl}}" ], "path": [ "api", "exams", "schedule", "{{exam_id}}" ] } }, "event": [ { "listen": "test", "script": { "exec": [ "pm.test('Status code is 200', function () {", " pm.response.to.have.status(200);", "});", "pm.test('Response has exam details', function () {", " var jsonData = pm.response.json();", " pm.expect(jsonData).to.have.property('examId');", " pm.expect(jsonData).to.have.property('examType');", " pm.expect(jsonData).to.have.property('examDate');", "});" ], "type": "text/javascript" } } ] }, { "name": "Update Exam Schedule (Instructor)", "request": { "method": "PUT", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"location\": \"Exam Hall B\",\n \"instructions\": \"Updated instructions: Bring student ID only\"\n}" }, "url": { "raw": "{{baseUrl}}/api/exams/schedule/{{exam_id}}", "host": [ "{{baseUrl}}" ], "path": [ "api", "exams", "schedule", "{{exam_id}}" ] } }, "event": [ { "listen": "test", "script": { "exec": [ "pm.test('Status code is 200', function () {", " pm.response.to.have.status(200);", "});", "pm.test('Location was updated', function () {", " var jsonData = pm.response.json();", " pm.expect(jsonData.location).to.equal('Exam Hall B');", "});" ], "type": "text/javascript" } } ] }, { "name": "Check Exam Conflicts (Admin)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/exams/schedule/conflicts", "host": [ "{{baseUrl}}" ], "path": [ "api", "exams", "schedule", "conflicts" ] } }, "event": [ { "listen": "test", "script": { "exec": [ "pm.test('Status code is 200', function () {", " pm.response.to.have.status(200);", "});", "pm.test('Response is array', function () {", " var jsonData = pm.response.json();", " pm.expect(jsonData).to.be.an('array');", "});" ], "type": "text/javascript" } } ] }, { "name": "Delete Exam Schedule (Admin)", "request": { "method": "DELETE", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/exams/schedule/{{exam_id}}", "host": [ "{{baseUrl}}" ], "path": [ "api", "exams", "schedule", "{{exam_id}}" ] } }, "event": [ { "listen": "test", "script": { "exec": [ "pm.test('Status code is 200', function () {", " pm.response.to.have.status(200);", "});" ], "type": "text/javascript" } } ] } ] }, { "name": "📆 Calendar Events", "description": "Personal and course calendar events management.", "item": [ { "name": "List Calendar Events", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" } ], "url": { "raw": "{{baseUrl}}/api/calendar/events", "host": [ "{{baseUrl}}" ], "path": [ "api", "calendar", "events" ] } }, "event": [ { "listen": "test", "script": { "exec": [ "pm.test('Status code is 200', function () {", " pm.response.to.have.status(200);", "});", "pm.test('Response has pagination', function () {", " var jsonData = pm.response.json();", " pm.expect(jsonData).to.have.property('data');", " pm.expect(jsonData).to.have.property('meta');", "});" ], "type": "text/javascript" } } ] }, { "name": "Create Calendar Event", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"title\": \"Office Hours\",\n \"description\": \"Weekly office hours for students\",\n \"eventType\": \"meeting\",\n \"startTime\": \"2026-03-10T14:00:00.000Z\",\n \"endTime\": \"2026-03-10T16:00:00.000Z\",\n \"location\": \"Room 305\",\n \"color\": \"#10B981\"\n}" }, "url": { "raw": "{{baseUrl}}/api/calendar/events", "host": [ "{{baseUrl}}" ], "path": [ "api", "calendar", "events" ] } }, "event": [ { "listen": "test", "script": { "exec": [ "pm.test('Status code is 201', function () {", " pm.response.to.have.status(201);", "});", "pm.test('Response has event ID', function () {", " var jsonData = pm.response.json();", " pm.expect(jsonData).to.have.property('eventId');", " pm.collectionVariables.set('calendar_event_id', jsonData.eventId);", "});" ], "type": "text/javascript" } } ] }, { "name": "Get Event by ID", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" } ], "url": { "raw": "{{baseUrl}}/api/calendar/events/{{calendar_event_id}}", "host": [ "{{baseUrl}}" ], "path": [ "api", "calendar", "events", "{{calendar_event_id}}" ] } }, "event": [ { "listen": "test", "script": { "exec": [ "pm.test('Status code is 200', function () {", " pm.response.to.have.status(200);", "});", "pm.test('Response has event details', function () {", " var jsonData = pm.response.json();", " pm.expect(jsonData).to.have.property('eventId');", " pm.expect(jsonData).to.have.property('title');", "});" ], "type": "text/javascript" } } ] }, { "name": "Update Calendar Event", "request": { "method": "PUT", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"title\": \"Updated Office Hours\",\n \"location\": \"Room 310\"\n}" }, "url": { "raw": "{{baseUrl}}/api/calendar/events/{{calendar_event_id}}", "host": [ "{{baseUrl}}" ], "path": [ "api", "calendar", "events", "{{calendar_event_id}}" ] } }, "event": [ { "listen": "test", "script": { "exec": [ "pm.test('Status code is 200', function () {", " pm.response.to.have.status(200);", "});", "pm.test('Title was updated', function () {", " var jsonData = pm.response.json();", " pm.expect(jsonData.title).to.equal('Updated Office Hours');", "});" ], "type": "text/javascript" } } ] }, { "name": "Delete Calendar Event", "request": { "method": "DELETE", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" } ], "url": { "raw": "{{baseUrl}}/api/calendar/events/{{calendar_event_id}}", "host": [ "{{baseUrl}}" ], "path": [ "api", "calendar", "events", "{{calendar_event_id}}" ] } }, "event": [ { "listen": "test", "script": { "exec": [ "pm.test('Status code is 200', function () {", " pm.response.to.have.status(200);", "});" ], "type": "text/javascript" } } ] } ] }, { "name": "🔗 Calendar Integrations", "description": "External calendar sync (Google Calendar, Outlook, iCal).", "item": [ { "name": "List Integrations", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" } ], "url": { "raw": "{{baseUrl}}/api/calendar/integrations", "host": [ "{{baseUrl}}" ], "path": [ "api", "calendar", "integrations" ] } }, "event": [ { "listen": "test", "script": { "exec": [ "pm.test('Status code is 200', function () {", " pm.response.to.have.status(200);", "});", "pm.test('Response is array', function () {", " var jsonData = pm.response.json();", " pm.expect(jsonData).to.be.an('array');", "});" ], "type": "text/javascript" } } ] }, { "name": "Connect Google Calendar", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"calendarType\": \"google\",\n \"accessToken\": \"google_oauth_access_token\",\n \"refreshToken\": \"google_oauth_refresh_token\"\n}" }, "url": { "raw": "{{baseUrl}}/api/calendar/integrations/connect", "host": [ "{{baseUrl}}" ], "path": [ "api", "calendar", "integrations", "connect" ] } }, "event": [ { "listen": "test", "script": { "exec": [ "pm.test('Status code is 201', function () {", " pm.response.to.have.status(201);", "});", "pm.test('Response has integration ID', function () {", " var jsonData = pm.response.json();", " pm.expect(jsonData).to.have.property('integrationId');", " pm.collectionVariables.set('integration_id', jsonData.integrationId);", "});" ], "type": "text/javascript" } } ] }, { "name": "Sync Calendar", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" } ], "url": { "raw": "{{baseUrl}}/api/calendar/integrations/{{integration_id}}/sync", "host": [ "{{baseUrl}}" ], "path": [ "api", "calendar", "integrations", "{{integration_id}}", "sync" ] } }, "event": [ { "listen": "test", "script": { "exec": [ "pm.test('Status code is 200', function () {", " pm.response.to.have.status(200);", "});" ], "type": "text/javascript" } } ] }, { "name": "Disconnect Integration", "request": { "method": "DELETE", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" } ], "url": { "raw": "{{baseUrl}}/api/calendar/integrations/{{integration_id}}", "host": [ "{{baseUrl}}" ], "path": [ "api", "calendar", "integrations", "{{integration_id}}" ] } }, "event": [ { "listen": "test", "script": { "exec": [ "pm.test('Status code is 200', function () {", " pm.response.to.have.status(200);", "});" ], "type": "text/javascript" } } ] } ] }, { "name": "📚 Course Materials", "description": "Course material upload, management, and YouTube video integration.", "item": [ { "name": "List Course Materials", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/courses/1/materials", "host": [ "{{baseUrl}}" ], "path": [ "api", "courses", "1", "materials" ] } }, "event": [ { "listen": "test", "script": { "exec": [ "pm.test('Status code is 200', function () {", " pm.response.to.have.status(200);", "});", "pm.test('Response has pagination', function () {", " var jsonData = pm.response.json();", " pm.expect(jsonData).to.have.property('data');", " pm.expect(jsonData).to.have.property('meta');", "});" ], "type": "text/javascript" } } ] }, { "name": "Create Course Material (Instructor)", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"title\": \"Week 1 Lecture Slides\",\n \"description\": \"Introduction to the course\",\n \"materialType\": \"slide\",\n \"externalUrl\": \"https://example.com/slides/week1.pdf\",\n \"weekNumber\": 1,\n \"isPublished\": true\n}" }, "url": { "raw": "{{baseUrl}}/api/courses/1/materials", "host": [ "{{baseUrl}}" ], "path": [ "api", "courses", "1", "materials" ] } }, "event": [ { "listen": "test", "script": { "exec": [ "pm.test('Status code is 201', function () {", " pm.response.to.have.status(201);", "});", "pm.test('Response has material ID', function () {", " var jsonData = pm.response.json();", " pm.expect(jsonData).to.have.property('materialId');", " pm.collectionVariables.set('material_id', jsonData.materialId);", "});" ], "type": "text/javascript" } } ] }, { "name": "Get Material by ID", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/courses/1/materials/{{material_id}}", "host": [ "{{baseUrl}}" ], "path": [ "api", "courses", "1", "materials", "{{material_id}}" ] } }, "event": [ { "listen": "test", "script": { "exec": [ "pm.test('Status code is 200', function () {", " pm.response.to.have.status(200);", "});", "pm.test('Response has material details', function () {", " var jsonData = pm.response.json();", " pm.expect(jsonData).to.have.property('materialId');", " pm.expect(jsonData).to.have.property('title');", "});" ], "type": "text/javascript" } } ] }, { "name": "Upload Video Material (Instructor)", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" } ], "body": { "mode": "formdata", "formdata": [ { "key": "video", "type": "file", "src": "", "description": "Video file to upload (mp4, avi, mov, webm, mkv)" }, { "key": "title", "value": "Week 1 Video Lecture: Introduction", "type": "text", "description": "Video title (required, max 255 chars)" }, { "key": "description", "value": "This video covers the introduction to the course and basic concepts.", "type": "text", "description": "Video description (optional)" }, { "key": "tags", "value": "lecture,week1,introduction", "type": "text", "description": "Comma-separated tags (optional)" }, { "key": "weekNumber", "value": "1", "type": "text", "description": "Week number to assign (1-52, optional)" }, { "key": "orderIndex", "value": "0", "type": "text", "description": "Sort order within the week (default: 0)" }, { "key": "isPublished", "value": "false", "type": "text", "description": "Publish immediately (default: false/draft)" } ] }, "url": { "raw": "{{baseUrl}}/api/courses/1/materials/video", "host": [ "{{baseUrl}}" ], "path": [ "api", "courses", "1", "materials", "video" ] }, "description": "Upload a video file to YouTube and create a course material record.\n\n**Supported formats:** mp4, avi, mov, webm, mkv, flv, wmv\n\n**Flow:**\n1. Video is uploaded to YouTube (unlisted)\n2. YouTube returns video ID\n3. Material record created with embed URL and YouTube video ID\n\n**Response includes:**\n- `materialId`: Database ID\n- `externalUrl`: YouTube embed URL\n- `youtubeVideoId`: Original YouTube video ID\n- `youtubeUrl`: Full YouTube watch URL\n- `embedUrl`: Embed URL for iframe\n\n**Note:** Requires YouTube API credentials configured in environment." }, "event": [ { "listen": "test", "script": { "exec": [ "pm.test('Status code is 201 or 400 (YouTube API required)', function () {", " pm.expect([201, 400]).to.include(pm.response.code);", "});", "", "if (pm.response.code === 201) {", " pm.test('Response has video material', function () {", " var jsonData = pm.response.json();", " pm.expect(jsonData).to.have.property('materialId');", " pm.expect(jsonData.materialType).to.equal('video');", " });", " ", " pm.test('Response has YouTube data', function () {", " var jsonData = pm.response.json();", " pm.expect(jsonData).to.have.property('youtubeVideoId');", " pm.expect(jsonData).to.have.property('externalUrl');", " pm.expect(jsonData.externalUrl).to.include('youtube.com/embed');", " });", " ", " pm.test('Response has new fields', function () {", " var jsonData = pm.response.json();", " pm.expect(jsonData).to.have.property('weekNumber');", " pm.expect(jsonData).to.have.property('orderIndex');", " });", "}" ], "type": "text/javascript" } } ] }, { "name": "Update Material (Instructor)", "request": { "method": "PUT", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"title\": \"Week 1 Lecture Slides (Updated)\",\n \"description\": \"Updated introduction slides\"\n}" }, "url": { "raw": "{{baseUrl}}/api/courses/1/materials/{{material_id}}", "host": [ "{{baseUrl}}" ], "path": [ "api", "courses", "1", "materials", "{{material_id}}" ] } }, "event": [ { "listen": "test", "script": { "exec": [ "pm.test('Status code is 200', function () {", " pm.response.to.have.status(200);", "});", "pm.test('Title was updated', function () {", " var jsonData = pm.response.json();", " pm.expect(jsonData.title).to.include('Updated');", "});" ], "type": "text/javascript" } } ] }, { "name": "Toggle Material Visibility", "request": { "method": "PATCH", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"isPublished\": false\n}" }, "url": { "raw": "{{baseUrl}}/api/courses/1/materials/{{material_id}}/visibility", "host": [ "{{baseUrl}}" ], "path": [ "api", "courses", "1", "materials", "{{material_id}}", "visibility" ] } }, "event": [ { "listen": "test", "script": { "exec": [ "pm.test('Status code is 200', function () {", " pm.response.to.have.status(200);", "});", "pm.test('Visibility was toggled', function () {", " var jsonData = pm.response.json();", " pm.expect(jsonData.isPublished).to.equal(0);", "});" ], "type": "text/javascript" } } ] }, { "name": "Get Material Download", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/courses/1/materials/{{material_id}}/download", "host": [ "{{baseUrl}}" ], "path": [ "api", "courses", "1", "materials", "{{material_id}}", "download" ] } }, "event": [ { "listen": "test", "script": { "exec": [ "pm.test('Status code is 200', function () {", " pm.response.to.have.status(200);", "});", "pm.test('Response has download info', function () {", " var jsonData = pm.response.json();", " pm.expect(jsonData).to.have.property('downloadUrl');", "});" ], "type": "text/javascript" } } ] }, { "name": "Track Material View", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/courses/1/materials/{{material_id}}/view", "host": [ "{{baseUrl}}" ], "path": [ "api", "courses", "1", "materials", "{{material_id}}", "view" ] } }, "event": [ { "listen": "test", "script": { "exec": [ "pm.test('Status code is 200', function () {", " pm.response.to.have.status(200);", "});", "pm.test('View was tracked', function () {", " var jsonData = pm.response.json();", " pm.expect(jsonData.message).to.equal('View tracked successfully');", " pm.expect(jsonData).to.have.property('viewCount');", "});" ], "type": "text/javascript" } } ] }, { "name": "Bulk Create Materials (Instructor)", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"materials\": [\n {\n \"title\": \"Week 3 Lecture: Advanced Topics\",\n \"description\": \"Deep dive into advanced concepts\",\n \"materialType\": \"lecture\",\n \"weekNumber\": 3,\n \"isPublished\": true\n },\n {\n \"title\": \"Week 3 Reading Materials\",\n \"description\": \"Supplementary reading for week 3\",\n \"materialType\": \"reading\",\n \"weekNumber\": 3,\n \"isPublished\": true\n },\n {\n \"title\": \"Week 3 Lab Exercises\",\n \"description\": \"Hands-on practice exercises\",\n \"materialType\": \"document\",\n \"weekNumber\": 3,\n \"isPublished\": false\n }\n ]\n}" }, "url": { "raw": "{{baseUrl}}/api/courses/1/materials/bulk", "host": [ "{{baseUrl}}" ], "path": [ "api", "courses", "1", "materials", "bulk" ] } }, "event": [ { "listen": "test", "script": { "exec": [ "pm.test('Status code is 201', function () {", " pm.response.to.have.status(201);", "});", "pm.test('Bulk create was successful', function () {", " var jsonData = pm.response.json();", " pm.expect(jsonData.count).to.equal(3);", " pm.expect(jsonData.data).to.be.an('array');", " pm.expect(jsonData.data.length).to.equal(3);", "});" ], "type": "text/javascript" } } ] }, { "name": "List Materials (with weekNumber filter)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/courses/1/materials?weekNumber=1&sortBy=orderIndex&sortOrder=ASC", "host": [ "{{baseUrl}}" ], "path": [ "api", "courses", "1", "materials" ], "query": [ { "key": "weekNumber", "value": "1" }, { "key": "sortBy", "value": "orderIndex" }, { "key": "sortOrder", "value": "ASC" } ] } }, "event": [ { "listen": "test", "script": { "exec": [ "pm.test('Status code is 200', function () {", " pm.response.to.have.status(200);", "});", "pm.test('Response has filtered materials', function () {", " var jsonData = pm.response.json();", " pm.expect(jsonData).to.have.property('data');", " pm.expect(jsonData).to.have.property('meta');", "});" ], "type": "text/javascript" } } ] }, { "name": "Get YouTube Embed URL", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/courses/1/materials/{{material_id}}/embed", "host": [ "{{baseUrl}}" ], "path": [ "api", "courses", "1", "materials", "{{material_id}}", "embed" ] } } }, { "name": "Delete Material (Instructor)", "request": { "method": "DELETE", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" } ], "url": { "raw": "{{baseUrl}}/api/courses/1/materials/{{material_id}}", "host": [ "{{baseUrl}}" ], "path": [ "api", "courses", "1", "materials", "{{material_id}}" ] } }, "event": [ { "listen": "test", "script": { "exec": [ "pm.test('Status code is 200', function () {", " pm.response.to.have.status(200);", "});" ], "type": "text/javascript" } } ] }, { "name": "Upload Document to Drive", "request": { "url": { "host": [ "{{baseUrl}}" ], "path": [ "api", "courses", "1", "materials", "document" ], "raw": "{{baseUrl}}/api/courses/1/materials/document" }, "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" } ], "description": "Upload a document (PDF, PPT, etc.) to Google Drive as course material", "body": { "mode": "formdata", "formdata": [ { "key": "document", "src": "", "type": "file" }, { "key": "title", "type": "text", "value": "Week 1 Lecture Notes" }, { "key": "description", "type": "text", "value": "Introduction to the course" }, { "key": "materialType", "type": "text", "value": "lecture" }, { "key": "weekNumber", "type": "text", "value": "1" }, { "key": "orderIndex", "type": "text", "value": "0" }, { "key": "isPublished", "type": "text", "value": "false" } ] } } }, { "request": { "header": [ { "value": "Bearer {{instructor_token}}", "key": "Authorization" } ], "url": { "path": [ "api", "courses", "1", "materials", "document" ], "host": [ "{{baseUrl}}" ], "raw": "{{baseUrl}}/api/courses/1/materials/document" }, "body": { "mode": "formdata", "formdata": [ { "type": "file", "key": "document", "description": "PDF file to upload (max 50MB)", "src": "" }, { "value": "Week 1: Introduction to Data Structures", "type": "text", "key": "title" }, { "value": "Comprehensive PDF lecture notes covering introduction to data structures", "type": "text", "key": "description" }, { "value": "lecture", "type": "text", "key": "materialType" }, { "value": "1", "type": "text", "key": "weekNumber" }, { "value": "0", "type": "text", "key": "orderIndex" }, { "value": "false", "type": "text", "key": "isPublished" } ] }, "description": "Upload a PDF document to Google Drive and create course material.\n\n**File Type:** PDF\n**Max Size:** 50MB\n**MIME Type:** application/pdf\n\n**Flow:**\n1. Document uploaded to Google Drive\n2. File placed in appropriate course folder (Lectures or General)\n3. Material record created with Drive metadata\n\n**Response includes:**\n- materialId, driveId, driveViewUrl, driveDownloadUrl, fileName", "method": "POST" }, "name": "Upload PDF Document (Instructor)" }, { "request": { "header": [ { "value": "Bearer {{instructor_token}}", "key": "Authorization" } ], "url": { "path": [ "api", "courses", "1", "materials", "document" ], "host": [ "{{baseUrl}}" ], "raw": "{{baseUrl}}/api/courses/1/materials/document" }, "body": { "mode": "formdata", "formdata": [ { "type": "file", "key": "document", "description": "PowerPoint file (ppt/pptx, max 50MB)", "src": "" }, { "value": "Week 2: Algorithms Overview Slides", "type": "text", "key": "title" }, { "value": "PowerPoint presentation covering algorithm fundamentals", "type": "text", "key": "description" }, { "value": "slide", "type": "text", "key": "materialType" }, { "value": "2", "type": "text", "key": "weekNumber" }, { "value": "true", "type": "text", "key": "isPublished" } ] }, "description": "Upload PowerPoint slides to Google Drive.\n\n**File Type:** PowerPoint\n**Supported:** .ppt, .pptx\n**Max Size:** 50MB\n**MIME Types:** application/vnd.ms-powerpoint, application/vnd.openxmlformats-officedocument.presentationml.presentation\n\n**Note:** Slides automatically go to Course/Lectures folder", "method": "POST" }, "name": "Upload PowerPoint Slides (Instructor)" }, { "request": { "header": [ { "value": "Bearer {{instructor_token}}", "key": "Authorization" } ], "url": { "path": [ "api", "courses", "1", "materials", "document" ], "host": [ "{{baseUrl}}" ], "raw": "{{baseUrl}}/api/courses/1/materials/document" }, "body": { "mode": "formdata", "formdata": [ { "type": "file", "key": "document", "description": "Word document (doc/docx, max 50MB)", "src": "" }, { "value": "Assignment Guidelines and Rubric", "type": "text", "key": "title" }, { "value": "Detailed guidelines and grading rubric for the course project", "type": "text", "key": "description" }, { "value": "document", "type": "text", "key": "materialType" }, { "value": "3", "type": "text", "key": "weekNumber" }, { "value": "true", "type": "text", "key": "isPublished" } ] }, "description": "Upload Word document to Google Drive.\n\n**File Type:** Word Document\n**Supported:** .doc, .docx\n**Max Size:** 50MB\n**MIME Types:** application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document\n\n**Note:** Documents go to Course/General folder", "method": "POST" }, "name": "Upload Word Document (Instructor)" }, { "request": { "header": [ { "value": "Bearer {{instructor_token}}", "key": "Authorization" } ], "url": { "path": [ "api", "courses", "1", "materials", "document" ], "host": [ "{{baseUrl}}" ], "raw": "{{baseUrl}}/api/courses/1/materials/document" }, "body": { "mode": "formdata", "formdata": [ { "type": "file", "key": "document", "description": "Image file (jpg/png/gif/webp, max 10MB)", "src": "" }, { "value": "Course Syllabus Diagram", "type": "text", "key": "title" }, { "value": "Visual representation of course topics and timeline", "type": "text", "key": "description" }, { "value": "document", "type": "text", "key": "materialType" }, { "value": "true", "type": "text", "key": "isPublished" } ] }, "description": "Upload image as course material.\n\n**File Type:** Image\n**Supported:** .jpg, .jpeg, .png, .gif, .webp, .svg\n**Max Size:** 10MB (smaller than documents)\n**MIME Types:** image/jpeg, image/png, image/gif, image/webp, image/svg+xml\n\n**Note:** Images have lower size limit than documents", "method": "POST" }, "name": "Upload Image Material (Instructor)" } ] }, { "name": "🏗️ Course Structure", "description": "Course content organization by lectures, sections, labs, and weeks.", "item": [ { "name": "Get Course Structure", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/courses/1/structure", "host": [ "{{baseUrl}}" ], "path": [ "api", "courses", "1", "structure" ] } }, "event": [ { "listen": "test", "script": { "exec": [ "pm.test('Status code is 200', function () {", " pm.response.to.have.status(200);", "});", "pm.test('Response has structure data', function () {", " var jsonData = pm.response.json();", " pm.expect(jsonData).to.have.property('data');", " pm.expect(jsonData).to.have.property('byWeek');", "});" ], "type": "text/javascript" } } ] }, { "name": "Get Structure Item by ID", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/courses/1/structure/{{structure_id}}", "host": [ "{{baseUrl}}" ], "path": [ "api", "courses", "1", "structure", "{{structure_id}}" ] } }, "event": [ { "listen": "test", "script": { "exec": [ "pm.test('Status code is 200', function () {", " pm.response.to.have.status(200);", "});", "pm.test('Response has structure details', function () {", " var jsonData = pm.response.json();", " pm.expect(jsonData).to.have.property('organizationId');", " pm.expect(jsonData).to.have.property('title');", "});" ], "type": "text/javascript" } } ] }, { "name": "Create Structure Item (Instructor)", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"title\": \"Week 2: Variables and Data Types\",\n \"description\": \"Learn about Python variables and basic data types\",\n \"organizationType\": \"lecture\",\n \"weekNumber\": 2\n}" }, "url": { "raw": "{{baseUrl}}/api/courses/1/structure", "host": [ "{{baseUrl}}" ], "path": [ "api", "courses", "1", "structure" ] } }, "event": [ { "listen": "test", "script": { "exec": [ "pm.test('Status code is 201', function () {", " pm.response.to.have.status(201);", "});", "pm.test('Response has structure ID', function () {", " var jsonData = pm.response.json();", " pm.expect(jsonData).to.have.property('organizationId');", " pm.collectionVariables.set('structure_id', jsonData.organizationId);", "});" ], "type": "text/javascript" } } ] }, { "name": "Update Structure Item (Instructor)", "request": { "method": "PUT", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"title\": \"Week 2: Variables, Data Types, and Operators\",\n \"description\": \"Updated description with operators\"\n}" }, "url": { "raw": "{{baseUrl}}/api/courses/1/structure/{{structure_id}}", "host": [ "{{baseUrl}}" ], "path": [ "api", "courses", "1", "structure", "{{structure_id}}" ] } }, "event": [ { "listen": "test", "script": { "exec": [ "pm.test('Status code is 200', function () {", " pm.response.to.have.status(200);", "});" ], "type": "text/javascript" } } ] }, { "name": "Reorder Structure Items (Instructor)", "request": { "method": "PATCH", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"orderIds\": [1, 2]\n}" }, "url": { "raw": "{{baseUrl}}/api/courses/1/structure/reorder", "host": [ "{{baseUrl}}" ], "path": [ "api", "courses", "1", "structure", "reorder" ] } }, "event": [ { "listen": "test", "script": { "exec": [ "pm.test('Status code is 200', function () {", " pm.response.to.have.status(200);", "});" ], "type": "text/javascript" } } ] }, { "name": "Delete Structure Item (Instructor)", "request": { "method": "DELETE", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" } ], "url": { "raw": "{{baseUrl}}/api/courses/1/structure/{{structure_id}}", "host": [ "{{baseUrl}}" ], "path": [ "api", "courses", "1", "structure", "{{structure_id}}" ] } }, "event": [ { "listen": "test", "script": { "exec": [ "pm.test('Status code is 200', function () {", " pm.response.to.have.status(200);", "});" ], "type": "text/javascript" } } ] } ] }, { "name": "👤 User Profile & Preferences", "item": [ { "name": "Get Current User Profile", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/users/profile", "host": [ "{{baseUrl}}" ], "path": [ "api", "users", "profile" ] } } }, { "name": "Update Profile", "request": { "method": "PUT", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{baseUrl}}/api/users/profile", "host": [ "{{baseUrl}}" ], "path": [ "api", "users", "profile" ] }, "body": { "mode": "raw", "raw": "{\"bio\":\"My bio\",\"socialLinks\":{\"github\":\"https://github.com/me\"}}" } } }, { "name": "Get Preferences", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/users/preferences", "host": [ "{{baseUrl}}" ], "path": [ "api", "users", "preferences" ] } } }, { "name": "Update Preferences", "request": { "method": "PUT", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{baseUrl}}/api/users/preferences", "host": [ "{{baseUrl}}" ], "path": [ "api", "users", "preferences" ] }, "body": { "mode": "raw", "raw": "{\"language\":\"en\",\"theme\":\"dark\",\"emailNotifications\":true,\"pushNotifications\":true}" } } }, { "name": "Change Password", "request": { "method": "PATCH", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{baseUrl}}/api/users/password", "host": [ "{{baseUrl}}" ], "path": [ "api", "users", "password" ] }, "body": { "mode": "raw", "raw": "{\"currentPassword\":\"SecureP@ss123\",\"newPassword\":\"NewSecureP@ss123!\"}" } } } ] }, { "name": "🔧 Admin - User Management (Enhanced)", "item": [ { "name": "Bulk Import Users (CSV)", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/admin/users/bulk-import", "host": [ "{{baseUrl}}" ], "path": [ "api", "admin", "users", "bulk-import" ] }, "body": { "mode": "formdata", "formdata": [ { "key": "file", "type": "file", "src": "" } ] } } }, { "name": "Bulk Status Change", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{baseUrl}}/api/admin/users/bulk-status", "host": [ "{{baseUrl}}" ], "path": [ "api", "admin", "users", "bulk-status" ] }, "body": { "mode": "raw", "raw": "{\"userIds\":[57,58],\"status\":\"active\"}" } } }, { "name": "User Statistics", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/admin/users/statistics", "host": [ "{{baseUrl}}" ], "path": [ "api", "admin", "users", "statistics" ] } } }, { "name": "Export Users (JSON)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/admin/users/export?format=json", "host": [ "{{baseUrl}}" ], "path": [ "api", "admin", "users", "export" ], "query": [ { "key": "format", "value": "json" } ] } } }, { "name": "Export Users (CSV)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/admin/users/export?format=csv", "host": [ "{{baseUrl}}" ], "path": [ "api", "admin", "users", "export" ], "query": [ { "key": "format", "value": "csv" } ] } } } ] }, { "name": "🔐 Admin - Roles & Permissions (Enhanced)", "item": [ { "name": "Roles with User Counts", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/admin/roles/with-users", "host": [ "{{baseUrl}}" ], "path": [ "api", "admin", "roles", "with-users" ] } } }, { "name": "Bulk Set Permissions for Role", "request": { "method": "PUT", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{baseUrl}}/api/admin/roles/1/permissions/bulk", "host": [ "{{baseUrl}}" ], "path": [ "api", "admin", "roles", "1", "permissions", "bulk" ] }, "body": { "mode": "raw", "raw": "{\"permissionIds\":[1,2,3]}" } } }, { "name": "Permission Matrix", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/admin/permissions/matrix", "host": [ "{{baseUrl}}" ], "path": [ "api", "admin", "permissions", "matrix" ] } } } ] }, { "item": [ { "name": "Get OAuth Auth URL", "request": { "url": { "host": [ "{{baseUrl}}" ], "path": [ "google-drive", "auth" ], "raw": "{{baseUrl}}/google-drive/auth" }, "method": "GET", "description": "Get OAuth2 URL for YouTube + Drive authorization" } }, { "name": "OAuth Callback", "request": { "url": { "host": [ "{{baseUrl}}" ], "path": [ "youtube", "callback" ], "query": [ { "key": "code", "value": "AUTH_CODE_HERE" } ], "raw": "{{baseUrl}}/youtube/callback?code=AUTH_CODE_HERE" }, "method": "GET", "description": "OAuth2 callback to exchange code for refresh token" } }, { "name": "Get Storage Quota", "request": { "url": { "host": [ "{{baseUrl}}" ], "path": [ "google-drive", "quota" ], "raw": "{{baseUrl}}/google-drive/quota" }, "method": "GET", "description": "Get Google Drive storage quota" } }, { "name": "Create Folder", "request": { "url": { "host": [ "{{baseUrl}}" ], "path": [ "google-drive", "folders" ], "raw": "{{baseUrl}}/google-drive/folders" }, "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Create a new folder in Google Drive", "body": { "mode": "raw", "raw": "{\n \"name\": \"Test Folder\",\n \"parentId\": null\n}" } } }, { "name": "Upload File", "request": { "url": { "host": [ "{{baseUrl}}" ], "path": [ "google-drive", "upload" ], "raw": "{{baseUrl}}/google-drive/upload" }, "method": "POST", "description": "Upload a file to Google Drive", "body": { "mode": "formdata", "formdata": [ { "key": "file", "src": "", "type": "file" }, { "key": "folderId", "type": "text", "value": "" } ] } } }, { "name": "List Folder Contents", "request": { "url": { "host": [ "{{baseUrl}}" ], "path": [ "google-drive", "folders", "FOLDER_ID" ], "raw": "{{baseUrl}}/google-drive/folders/FOLDER_ID" }, "method": "GET", "description": "List contents of a Drive folder" } }, { "name": "Download File", "request": { "url": { "host": [ "{{baseUrl}}" ], "path": [ "google-drive", "files", "FILE_ID", "download" ], "raw": "{{baseUrl}}/google-drive/files/FILE_ID/download" }, "method": "GET", "description": "Download a file from Google Drive" } }, { "name": "Delete File", "request": { "url": { "host": [ "{{baseUrl}}" ], "path": [ "google-drive", "files", "FILE_ID" ], "raw": "{{baseUrl}}/google-drive/files/FILE_ID" }, "method": "DELETE", "description": "Delete a file from Google Drive" } }, { "name": "[Admin] Initialize Root Folder", "request": { "url": { "host": [ "{{baseUrl}}" ], "path": [ "google-drive", "admin", "init" ], "raw": "{{baseUrl}}/google-drive/admin/init" }, "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "description": "Initialize the EduVerse root folder in Google Drive (Admin only)" } }, { "name": "[Admin] Initialize Course Structure", "request": { "url": { "host": [ "{{baseUrl}}" ], "path": [ "google-drive", "admin", "courses", "1", "init" ], "raw": "{{baseUrl}}/google-drive/admin/courses/1/init" }, "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "description": "Create folder structure for a course (General, Lectures, Labs, etc.)" } }, { "name": "[Admin] Initialize Lab Structure", "request": { "url": { "host": [ "{{baseUrl}}" ], "path": [ "google-drive", "admin", "labs", "1", "init" ], "raw": "{{baseUrl}}/google-drive/admin/labs/1/init" }, "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "description": "Create folder structure for a lab (instructions, ta_materials, submissions)" } }, { "name": "[Admin] Initialize Assignment Structure", "request": { "url": { "host": [ "{{baseUrl}}" ], "path": [ "google-drive", "admin", "assignments", "1", "init" ], "raw": "{{baseUrl}}/google-drive/admin/assignments/1/init" }, "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "description": "Create folder structure for an assignment (instructions, submissions)" } }, { "name": "[Admin] Get Full Folder Tree", "request": { "url": { "host": [ "{{baseUrl}}" ], "path": [ "google-drive", "admin", "tree" ], "raw": "{{baseUrl}}/google-drive/admin/tree" }, "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "description": "Get the full folder tree from database" } }, { "name": "[Admin] Get Course Folder Tree", "request": { "url": { "host": [ "{{baseUrl}}" ], "path": [ "google-drive", "admin", "courses", "1", "tree" ], "raw": "{{baseUrl}}/google-drive/admin/courses/1/tree" }, "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "description": "Get folder tree for a specific course" } } ], "name": "📁 Google Drive", "description": "Google Drive Integration APIs for file storage and management" }, { "name": "Security & Audit", "item": [ { "name": "Get Security Dashboard", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}", "type": "text" } ], "url": { "raw": "{{baseUrl}}/api/security/dashboard", "host": [ "{{baseUrl}}" ], "path": [ "api", "security", "dashboard" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status code is 200\", function () {", " pm.response.to.have.status(200);", "});" ], "type": "text/javascript" } } ] }, { "name": "Get Security Logs", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}", "type": "text" } ], "url": { "raw": "{{baseUrl}}/api/security/logs?page=1&limit=20", "host": [ "{{baseUrl}}" ], "path": [ "api", "security", "logs" ], "query": [ { "key": "page", "value": "1" }, { "key": "limit", "value": "20" } ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status code is 200\", function () {", " pm.response.to.have.status(200);", "});" ], "type": "text/javascript" } } ] }, { "name": "Get Security Log Stats", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}", "type": "text" } ], "url": { "raw": "{{baseUrl}}/api/security/logs/stats", "host": [ "{{baseUrl}}" ], "path": [ "api", "security", "logs", "stats" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status code is 200\", function () {", " pm.response.to.have.status(200);", "});" ], "type": "text/javascript" } } ] }, { "name": "Export Security Logs", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{it_admin_token}}", "type": "text" }, { "key": "Content-Type", "value": "application/json", "type": "text" } ], "url": { "raw": "{{baseUrl}}/api/security/logs/export", "host": [ "{{baseUrl}}" ], "path": [ "api", "security", "logs", "export" ] }, "body": { "mode": "raw", "raw": "{\n \"format\": \"json\"\n}", "options": { "raw": { "language": "json" } } }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status code is 201\", function () {", " pm.response.to.have.status(201);", "});" ], "type": "text/javascript" } } ] }, { "name": "Get Active Threats", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{it_admin_token}}", "type": "text" } ], "url": { "raw": "{{baseUrl}}/api/security/threats", "host": [ "{{baseUrl}}" ], "path": [ "api", "security", "threats" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status code is 200\", function () {", " pm.response.to.have.status(200);", "});" ], "type": "text/javascript" } } ] }, { "name": "Get Active Sessions", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}", "type": "text" } ], "url": { "raw": "{{baseUrl}}/api/security/sessions", "host": [ "{{baseUrl}}" ], "path": [ "api", "security", "sessions" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status code is 200\", function () {", " pm.response.to.have.status(200);", "});" ], "type": "text/javascript" } } ] }, { "name": "Revoke Session By ID", "request": { "method": "DELETE", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}", "type": "text" } ], "url": { "raw": "{{baseUrl}}/api/security/sessions/1", "host": [ "{{baseUrl}}" ], "path": [ "api", "security", "sessions", "1" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status code is 200\", function () {", " pm.response.to.have.status(200);", "});" ], "type": "text/javascript" } } ] }, { "name": "Revoke All Sessions For User", "request": { "method": "DELETE", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}", "type": "text" } ], "url": { "raw": "{{baseUrl}}/api/security/sessions/user/10", "host": [ "{{baseUrl}}" ], "path": [ "api", "security", "sessions", "user", "10" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status code is 200\", function () {", " pm.response.to.have.status(200);", "});" ], "type": "text/javascript" } } ] }, { "name": "Get Login Attempts", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}", "type": "text" } ], "url": { "raw": "{{baseUrl}}/api/security/login-attempts?page=1&limit=20", "host": [ "{{baseUrl}}" ], "path": [ "api", "security", "login-attempts" ], "query": [ { "key": "page", "value": "1" }, { "key": "limit", "value": "20" } ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status code is 200\", function () {", " pm.response.to.have.status(200);", "});" ], "type": "text/javascript" } } ] }, { "name": "Get Blocked IPs", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{it_admin_token}}", "type": "text" } ], "url": { "raw": "{{baseUrl}}/api/security/blocked-ips", "host": [ "{{baseUrl}}" ], "path": [ "api", "security", "blocked-ips" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status code is 200\", function () {", " pm.response.to.have.status(200);", "});" ], "type": "text/javascript" } } ] }, { "name": "Block IP", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{it_admin_token}}", "type": "text" }, { "key": "Content-Type", "value": "application/json", "type": "text" } ], "url": { "raw": "{{baseUrl}}/api/security/block-ip", "host": [ "{{baseUrl}}" ], "path": [ "api", "security", "block-ip" ] }, "body": { "mode": "raw", "raw": "{\n \"ipAddress\": \"192.168.1.50\",\n \"reason\": \"Repeated failed logins\"\n}", "options": { "raw": { "language": "json" } } }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status code is 201\", function () {", " pm.response.to.have.status(201);", "});" ], "type": "text/javascript" } } ] }, { "name": "Unblock IP", "request": { "method": "DELETE", "header": [ { "key": "Authorization", "value": "Bearer {{it_admin_token}}", "type": "text" } ], "url": { "raw": "{{baseUrl}}/api/security/blocked-ips/1", "host": [ "{{baseUrl}}" ], "path": [ "api", "security", "blocked-ips", "1" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status code is 200\", function () {", " pm.response.to.have.status(200);", "});" ], "type": "text/javascript" } } ] }, { "name": "Get Audit Logs", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}", "type": "text" } ], "url": { "raw": "{{baseUrl}}/api/audit/logs?page=1&limit=20", "host": [ "{{baseUrl}}" ], "path": [ "api", "audit", "logs" ], "query": [ { "key": "page", "value": "1" }, { "key": "limit", "value": "20" } ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status code is 200\", function () {", " pm.response.to.have.status(200);", "});" ], "type": "text/javascript" } } ] }, { "name": "Get Entity Audit History", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}", "type": "text" } ], "url": { "raw": "{{baseUrl}}/api/audit/logs/entity/user/10", "host": [ "{{baseUrl}}" ], "path": [ "api", "audit", "logs", "entity", "user", "10" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status code is 200\", function () {", " pm.response.to.have.status(200);", "});" ], "type": "text/javascript" } } ] }, { "name": "Export Audit Logs", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{it_admin_token}}", "type": "text" }, { "key": "Content-Type", "value": "application/json", "type": "text" } ], "url": { "raw": "{{baseUrl}}/api/audit/logs/export", "host": [ "{{baseUrl}}" ], "path": [ "api", "audit", "logs", "export" ] }, "body": { "mode": "raw", "raw": "{\n \"format\": \"csv\"\n}", "options": { "raw": { "language": "json" } } }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status code is 201\", function () {", " pm.response.to.have.status(201);", "});" ], "type": "text/javascript" } } ] } ] }, { "name": "Settings & Integrations", "item": [ { "name": "Get All System Settings", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}", "type": "text" } ], "url": { "raw": "{{baseUrl}}/api/settings", "host": [ "{{baseUrl}}" ], "path": [ "api", "settings" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status code is 200\", function () {", " pm.response.to.have.status(200);", "});" ], "type": "text/javascript" } } ] }, { "name": "Update System Settings", "request": { "method": "PUT", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}", "type": "text" }, { "key": "Content-Type", "value": "application/json", "type": "text" } ], "url": { "raw": "{{baseUrl}}/api/settings", "host": [ "{{baseUrl}}" ], "path": [ "api", "settings" ] }, "body": { "mode": "raw", "raw": "{\n \"settings\": {\n \"platform_name\": \"EduVerse updated\"\n }\n}", "options": { "raw": { "language": "json" } } }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status code is 200\", function () {", " pm.response.to.have.status(200);", "});" ], "type": "text/javascript" } } ] }, { "name": "Get Setting by Key", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}", "type": "text" } ], "url": { "raw": "{{baseUrl}}/api/settings/platform_name", "host": [ "{{baseUrl}}" ], "path": [ "api", "settings", "platform_name" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status code is 200\", function () {", " pm.response.to.have.status(200);", "});" ], "type": "text/javascript" } } ] }, { "name": "Update Setting by Key", "request": { "method": "PUT", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}", "type": "text" }, { "key": "Content-Type", "value": "application/json", "type": "text" } ], "url": { "raw": "{{baseUrl}}/api/settings/platform_name", "host": [ "{{baseUrl}}" ], "path": [ "api", "settings", "platform_name" ] }, "body": { "mode": "raw", "raw": "{\n \"value\": \"EduVerse Pro\"\n}", "options": { "raw": { "language": "json" } } }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status code is 200\", function () {", " pm.response.to.have.status(200);", "});" ], "type": "text/javascript" } } ] }, { "name": "Get Branding Settings (Public)", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/api/settings/branding", "host": [ "{{baseUrl}}" ], "path": [ "api", "settings", "branding" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status code is 200\", function () {", " pm.response.to.have.status(200);", "});" ], "type": "text/javascript" } } ] }, { "name": "Update Branding Settings", "request": { "method": "PUT", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}", "type": "text" }, { "key": "Content-Type", "value": "application/json", "type": "text" } ], "url": { "raw": "{{baseUrl}}/api/settings/branding/1", "host": [ "{{baseUrl}}" ], "path": [ "api", "settings", "branding", "1" ] }, "body": { "mode": "raw", "raw": "{\n \"primaryColor\": \"#ff0000\"\n}", "options": { "raw": { "language": "json" } } }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status code is 200\", function () {", " pm.response.to.have.status(200);", "});" ], "type": "text/javascript" } } ] }, { "name": "Get Rate Limit Configs", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{it_admin_token}}", "type": "text" } ], "url": { "raw": "{{baseUrl}}/api/settings/rate-limits", "host": [ "{{baseUrl}}" ], "path": [ "api", "settings", "rate-limits" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status code is 200\", function () {", " pm.response.to.have.status(200);", "});" ], "type": "text/javascript" } } ] }, { "name": "Update Rate Limit", "request": { "method": "PUT", "header": [ { "key": "Authorization", "value": "Bearer {{it_admin_token}}", "type": "text" }, { "key": "Content-Type", "value": "application/json", "type": "text" } ], "url": { "raw": "{{baseUrl}}/api/settings/rate-limits/1", "host": [ "{{baseUrl}}" ], "path": [ "api", "settings", "rate-limits", "1" ] }, "body": { "mode": "raw", "raw": "{\n \"maxRequests\": 1000,\n \"windowSeconds\": 60\n}", "options": { "raw": { "language": "json" } } }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status code is 200\", function () {", " pm.response.to.have.status(200);", "});" ], "type": "text/javascript" } } ] }, { "name": "Get All API Integrations", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}", "type": "text" } ], "url": { "raw": "{{baseUrl}}/api/integrations", "host": [ "{{baseUrl}}" ], "path": [ "api", "integrations" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status code is 200\", function () {", " pm.response.to.have.status(200);", "});" ], "type": "text/javascript" } } ] }, { "name": "Create API Integration", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{it_admin_token}}", "type": "text" }, { "key": "Content-Type", "value": "application/json", "type": "text" } ], "url": { "raw": "{{baseUrl}}/api/integrations", "host": [ "{{baseUrl}}" ], "path": [ "api", "integrations" ] }, "body": { "mode": "raw", "raw": "{\n \"integrationName\": \"Canvas LMS\",\n \"integrationType\": \"lms\",\n \"campusId\": 1,\n \"apiEndpoint\": \"https://canvas.example.com\",\n \"apiKey\": \"s3cr3t\",\n \"apiSecret\": \"s3cr3t2\",\n \"configuration\": \"{}\"\n}", "options": { "raw": { "language": "json" } } }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status code is 201\", function () {", " pm.response.to.have.status(201);", "});" ], "type": "text/javascript" } } ] }, { "name": "Get API Integration", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}", "type": "text" } ], "url": { "raw": "{{baseUrl}}/api/integrations/1", "host": [ "{{baseUrl}}" ], "path": [ "api", "integrations", "1" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status code is 200\", function () {", " pm.response.to.have.status(200);", "});" ], "type": "text/javascript" } } ] }, { "name": "Update API Integration", "request": { "method": "PUT", "header": [ { "key": "Authorization", "value": "Bearer {{it_admin_token}}", "type": "text" }, { "key": "Content-Type", "value": "application/json", "type": "text" } ], "url": { "raw": "{{baseUrl}}/api/integrations/1", "host": [ "{{baseUrl}}" ], "path": [ "api", "integrations", "1" ] }, "body": { "mode": "raw", "raw": "{\n \"isActive\": true,\n \"apiEndpoint\": \"https://canvas-new.example.com\"\n}", "options": { "raw": { "language": "json" } } }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status code is 200\", function () {", " pm.response.to.have.status(200);", "});" ], "type": "text/javascript" } } ] }, { "name": "Delete API Integration", "request": { "method": "DELETE", "header": [ { "key": "Authorization", "value": "Bearer {{it_admin_token}}", "type": "text" } ], "url": { "raw": "{{baseUrl}}/api/integrations/1", "host": [ "{{baseUrl}}" ], "path": [ "api", "integrations", "1" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status code is 200\", function () {", " pm.response.to.have.status(200);", "});" ], "type": "text/javascript" } } ] }, { "name": "Test Integration Connection", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{it_admin_token}}", "type": "text" } ], "url": { "raw": "{{baseUrl}}/api/integrations/1/test", "host": [ "{{baseUrl}}" ], "path": [ "api", "integrations", "1", "test" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status code is 201\", function () {", " pm.response.to.have.status(201);", "});" ], "type": "text/javascript" } } ] }, { "name": "Trigger Integration Sync", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{it_admin_token}}", "type": "text" } ], "url": { "raw": "{{baseUrl}}/api/integrations/1/sync", "host": [ "{{baseUrl}}" ], "path": [ "api", "integrations", "1", "sync" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status code is 201\", function () {", " pm.response.to.have.status(201);", "});" ], "type": "text/javascript" } } ] } ] }, { "name": "📊 Monitoring & Server Health", "item": [ { "name": "Get Server Records", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{baseUrl}}/api/monitoring/servers", "host": [ "{{baseUrl}}" ], "path": [ "api", "monitoring", "servers" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status 200\", () => pm.response.to.have.status(200));", "pm.test(\"Has data\", () => pm.expect(pm.response.json()).to.have.property(\"data\"));" ], "type": "text/javascript" } } ] }, { "name": "Get Server Health", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{baseUrl}}/api/monitoring/health", "host": [ "{{baseUrl}}" ], "path": [ "api", "monitoring", "health" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status 200\", () => pm.response.to.have.status(200));", "var json = pm.response.json();", "pm.test(\"Has hostname\", () => pm.expect(json.data).to.have.property(\"hostname\"));", "pm.test(\"Has cpuUsage\", () => pm.expect(json.data).to.have.property(\"cpuUsage\"));" ], "type": "text/javascript" } } ] }, { "name": "Get Server Metrics", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{baseUrl}}/api/monitoring/metrics", "host": [ "{{baseUrl}}" ], "path": [ "api", "monitoring", "metrics" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status 200\", () => pm.response.to.have.status(200));", "pm.test(\"Has current\", () => pm.expect(pm.response.json().data).to.have.property(\"current\"));" ], "type": "text/javascript" } } ] }, { "name": "Get Server Health (Admin)", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{baseUrl}}/api/monitoring/health", "host": [ "{{baseUrl}}" ], "path": [ "api", "monitoring", "health" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{adminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status 200 - Admin access\", () => pm.response.to.have.status(200));" ], "type": "text/javascript" } } ] }, { "name": "Get Server Health (Student - DENIED)", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{baseUrl}}/api/monitoring/health", "host": [ "{{baseUrl}}" ], "path": [ "api", "monitoring", "health" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{studentToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status 403 - Student denied\", () => pm.response.to.have.status(403));" ], "type": "text/javascript" } } ] } ] }, { "name": "🐛 System Errors", "item": [ { "name": "Get All System Errors", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{baseUrl}}/api/errors", "host": [ "{{baseUrl}}" ], "path": [ "api", "errors" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status 200\", () => pm.response.to.have.status(200));", "var json = pm.response.json();", "pm.test(\"Has data array\", () => pm.expect(json).to.have.property(\"data\"));", "pm.test(\"Has meta\", () => pm.expect(json).to.have.property(\"meta\"));" ], "type": "text/javascript" } } ] }, { "name": "Get System Errors (paginated)", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{baseUrl}}/api/errors?page=1&limit=5", "host": [ "{{baseUrl}}" ], "path": [ "api", "errors?page=1&limit=5" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status 200\", () => pm.response.to.have.status(200));", "pm.test(\"Pagination meta\", () => { var m = pm.response.json().meta; pm.expect(m).to.have.property(\"total\"); pm.expect(m).to.have.property(\"page\"); pm.expect(m).to.have.property(\"limit\"); pm.expect(m).to.have.property(\"totalPages\"); });" ], "type": "text/javascript" } } ] }, { "name": "Get Error Statistics", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{baseUrl}}/api/errors/stats", "host": [ "{{baseUrl}}" ], "path": [ "api", "errors", "stats" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status 200\", () => pm.response.to.have.status(200));", "pm.test(\"Has stats\", () => pm.expect(pm.response.json().data).to.have.property(\"total\"));" ], "type": "text/javascript" } } ] }, { "name": "Get System Errors (Student - DENIED)", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{baseUrl}}/api/errors", "host": [ "{{baseUrl}}" ], "path": [ "api", "errors" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{studentToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status 403 - Student denied\", () => pm.response.to.have.status(403));" ], "type": "text/javascript" } } ] } ] }, { "name": "🔐 SSL Certificates", "item": [ { "name": "Get All SSL Certificates", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{baseUrl}}/api/ssl", "host": [ "{{baseUrl}}" ], "path": [ "api", "ssl" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status 200\", () => pm.response.to.have.status(200));", "pm.test(\"Has data\", () => pm.expect(pm.response.json()).to.have.property(\"data\"));" ], "type": "text/javascript" } } ] }, { "name": "Get Expiring Certificates", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{baseUrl}}/api/ssl/expiring", "host": [ "{{baseUrl}}" ], "path": [ "api", "ssl", "expiring" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status 200\", () => pm.response.to.have.status(200));" ], "type": "text/javascript" } } ] }, { "name": "Get SSL Certificate by ID", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{baseUrl}}/api/ssl/1", "host": [ "{{baseUrl}}" ], "path": [ "api", "ssl", "1" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status 200\", () => pm.response.to.have.status(200));" ], "type": "text/javascript" } } ] }, { "name": "Get SSL Certificates (Admin)", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{baseUrl}}/api/ssl", "host": [ "{{baseUrl}}" ], "path": [ "api", "ssl" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{adminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status 200 - Admin access\", () => pm.response.to.have.status(200));" ], "type": "text/javascript" } } ] }, { "name": "Get SSL Certificates (Student - DENIED)", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{baseUrl}}/api/ssl", "host": [ "{{baseUrl}}" ], "path": [ "api", "ssl" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{studentToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status 403 - Student denied\", () => pm.response.to.have.status(403));" ], "type": "text/javascript" } } ] } ] }, { "name": "🚨 System Alerts", "item": [ { "name": "Get All Alerts", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{baseUrl}}/api/alerts", "host": [ "{{baseUrl}}" ], "path": [ "api", "alerts" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status 200\", () => pm.response.to.have.status(200));", "pm.test(\"Has data\", () => pm.expect(pm.response.json()).to.have.property(\"data\"));" ], "type": "text/javascript" } } ] }, { "name": "Create Alert Rule", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{baseUrl}}/api/alerts", "host": [ "{{baseUrl}}" ], "path": [ "api", "alerts" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] }, "body": { "mode": "raw", "raw": "{\n \"name\": \"High CPU Alert\",\n \"conditionType\": \"cpu_usage\",\n \"threshold\": 90,\n \"description\": \"Alert when CPU exceeds 90%\"\n}" } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status 201\", () => pm.response.to.have.status(201));", "var json = pm.response.json();", "pm.test(\"Has alert data\", () => pm.expect(json).to.have.property(\"data\"));", "if (json.data && json.data.id) pm.collectionVariables.set(\"createdAlertId\", json.data.id);" ], "type": "text/javascript" } } ] }, { "name": "Update Alert Rule", "request": { "method": "PATCH", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{baseUrl}}/api/alerts/1", "host": [ "{{baseUrl}}" ], "path": [ "api", "alerts", "1" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] }, "body": { "mode": "raw", "raw": "{\n \"name\": \"Updated CPU Alert\",\n \"threshold\": 95\n}" } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status 200 or 404\", () => pm.expect([200,404]).to.include(pm.response.code));" ], "type": "text/javascript" } } ] }, { "name": "Delete Alert Rule", "request": { "method": "DELETE", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{baseUrl}}/api/alerts/1", "host": [ "{{baseUrl}}" ], "path": [ "api", "alerts", "1" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status 200 or 404\", () => pm.expect([200,404]).to.include(pm.response.code));" ], "type": "text/javascript" } } ] }, { "name": "Create Alert (Student - DENIED)", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{baseUrl}}/api/alerts", "host": [ "{{baseUrl}}" ], "path": [ "api", "alerts" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{studentToken}}", "type": "string" } ] }, "body": { "mode": "raw", "raw": "{\n \"name\": \"Test\",\n \"conditionType\": \"cpu_usage\",\n \"threshold\": 90\n}" } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status 403 - Student denied\", () => pm.response.to.have.status(403));" ], "type": "text/javascript" } } ] } ] }, { "name": "💾 Backups", "item": [ { "name": "List Backups", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{baseUrl}}/api/backups", "host": [ "{{baseUrl}}" ], "path": [ "api", "backups" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status 200\", () => pm.response.to.have.status(200));", "pm.test(\"Has data\", () => pm.expect(pm.response.json()).to.have.property(\"data\"));" ], "type": "text/javascript" } } ] }, { "name": "Create Backup", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{baseUrl}}/api/backups", "host": [ "{{baseUrl}}" ], "path": [ "api", "backups" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status 201\", () => pm.response.to.have.status(201));", "var json = pm.response.json();", "pm.test(\"Has backup data\", () => pm.expect(json).to.have.property(\"data\"));" ], "type": "text/javascript" } } ] }, { "name": "List Backups (Admin)", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{baseUrl}}/api/backups", "host": [ "{{baseUrl}}" ], "path": [ "api", "backups" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{adminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status 200 - Admin access\", () => pm.response.to.have.status(200));" ], "type": "text/javascript" } } ] }, { "name": "Create Backup (Student - DENIED)", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{baseUrl}}/api/backups", "host": [ "{{baseUrl}}" ], "path": [ "api", "backups" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{studentToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status 403 - Student denied\", () => pm.response.to.have.status(403));" ], "type": "text/javascript" } } ] } ] }, { "name": "🗄️ Database Operations", "item": [ { "name": "Get Database Status", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{baseUrl}}/api/database/status", "host": [ "{{baseUrl}}" ], "path": [ "api", "database", "status" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status 200\", () => pm.response.to.have.status(200));", "var json = pm.response.json();", "pm.test(\"Has uptime\", () => pm.expect(json.data).to.have.property(\"uptime\"));", "pm.test(\"Has version\", () => pm.expect(json.data).to.have.property(\"version\"));" ], "type": "text/javascript" } } ] }, { "name": "Get Database Tables", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{baseUrl}}/api/database/tables", "host": [ "{{baseUrl}}" ], "path": [ "api", "database", "tables" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status 200\", () => pm.response.to.have.status(200));", "pm.test(\"Has tables data\", () => pm.expect(pm.response.json().data.length).to.be.above(0));" ], "type": "text/javascript" } } ] }, { "name": "Optimize Database", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{baseUrl}}/api/database/optimize", "host": [ "{{baseUrl}}" ], "path": [ "api", "database", "optimize" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{itAdminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status 201\", () => pm.response.to.have.status(201));", "pm.test(\"Has results\", () => pm.expect(pm.response.json()).to.have.property(\"data\"));" ], "type": "text/javascript" } } ] }, { "name": "Get Database Status (Admin)", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{baseUrl}}/api/database/status", "host": [ "{{baseUrl}}" ], "path": [ "api", "database", "status" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{adminToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status 200 - Admin access\", () => pm.response.to.have.status(200));" ], "type": "text/javascript" } } ] }, { "name": "Get Database Tables (Student - DENIED)", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{baseUrl}}/api/database/tables", "host": [ "{{baseUrl}}" ], "path": [ "api", "database", "tables" ] }, "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{studentToken}}", "type": "string" } ] } }, "response": [], "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Status 403 - Student denied\", () => pm.response.to.have.status(403));" ], "type": "text/javascript" } } ] } ] }, { "name": "🟡 Study Groups", "item": [ { "name": "Get All Groups", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/study-groups", "host": [ "{{baseUrl}}" ], "path": [ "api", "study-groups" ] } }, "response": [] }, { "name": "Get My Groups", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/study-groups/my", "host": [ "{{baseUrl}}" ], "path": [ "api", "study-groups", "my" ] } }, "response": [] }, { "name": "Get Group by ID", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/study-groups/1", "host": [ "{{baseUrl}}" ], "path": [ "api", "study-groups", "1" ] } }, "response": [] }, { "name": "Create Group", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{baseUrl}}/api/study-groups", "host": [ "{{baseUrl}}" ], "path": [ "api", "study-groups" ] }, "body": { "mode": "raw", "raw": "{\n \"courseId\": 1,\n \"groupName\": \"Math Wizards\",\n \"description\": \"A group for hardcore math studying\",\n \"maxMembers\": 10,\n \"isPublic\": true\n}", "options": { "raw": { "language": "json" } } } }, "response": [] }, { "name": "Join Group", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{baseUrl}}/api/study-groups/1/join", "host": [ "{{baseUrl}}" ], "path": [ "api", "study-groups", "1", "join" ] } }, "response": [] }, { "name": "Leave Group", "request": { "method": "DELETE", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/study-groups/1/leave", "host": [ "{{baseUrl}}" ], "path": [ "api", "study-groups", "1", "leave" ] } }, "response": [] }, { "name": "Get Group Members", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/study-groups/1/members", "host": [ "{{baseUrl}}" ], "path": [ "api", "study-groups", "1", "members" ] } }, "response": [] }, { "name": "Update Group (Creator)", "request": { "method": "PUT", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{baseUrl}}/api/study-groups/1", "host": [ "{{baseUrl}}" ], "path": [ "api", "study-groups", "1" ] }, "body": { "mode": "raw", "raw": "{\n \"description\": \"Updated description!\"\n}", "options": { "raw": { "language": "json" } } } }, "response": [] }, { "name": "Delete Group (Creator/Admin)", "request": { "method": "DELETE", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/study-groups/1", "host": [ "{{baseUrl}}" ], "path": [ "api", "study-groups", "1" ] } }, "response": [] } ] }, { "name": "🟡 Office Hours", "item": [ { "name": "Get All Slots (Instructor)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" } ], "url": { "raw": "{{baseUrl}}/api/office-hours/slots", "host": [ "{{baseUrl}}" ], "path": [ "api", "office-hours", "slots" ] } }, "response": [] }, { "name": "Get Available Slots", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/office-hours/available", "host": [ "{{baseUrl}}" ], "path": [ "api", "office-hours", "available" ] } }, "response": [] }, { "name": "Get My Slots (Instructor)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" } ], "url": { "raw": "{{baseUrl}}/api/office-hours/my-slots", "host": [ "{{baseUrl}}" ], "path": [ "api", "office-hours", "my-slots" ] } }, "response": [] }, { "name": "Create Slot (Instructor)", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{baseUrl}}/api/office-hours/slots", "host": [ "{{baseUrl}}" ], "path": [ "api", "office-hours", "slots" ] }, "body": { "mode": "raw", "raw": "{\n \"dayOfWeek\": \"monday\",\n \"startTime\": \"10:00:00\",\n \"endTime\": \"12:00:00\",\n \"location\": \"Room 303\",\n \"mode\": \"in_person\",\n \"maxAppointments\": 5\n}", "options": { "raw": { "language": "json" } } } }, "response": [] }, { "name": "Update Slot (Instructor)", "request": { "method": "PUT", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{baseUrl}}/api/office-hours/slots/1", "host": [ "{{baseUrl}}" ], "path": [ "api", "office-hours", "slots", "1" ] }, "body": { "mode": "raw", "raw": "{\n \"location\": \"Room 305\"\n}", "options": { "raw": { "language": "json" } } } }, "response": [] }, { "name": "Delete/Cancel Slot (Instructor)", "request": { "method": "DELETE", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" } ], "url": { "raw": "{{baseUrl}}/api/office-hours/slots/1", "host": [ "{{baseUrl}}" ], "path": [ "api", "office-hours", "slots", "1" ] } }, "response": [] }, { "name": "Get All Appointments (Instructor)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" } ], "url": { "raw": "{{baseUrl}}/api/office-hours/appointments", "host": [ "{{baseUrl}}" ], "path": [ "api", "office-hours", "appointments" ] } }, "response": [] }, { "name": "Get My Appointments (Student)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/office-hours/my-appointments", "host": [ "{{baseUrl}}" ], "path": [ "api", "office-hours", "my-appointments" ] } }, "response": [] }, { "name": "Book Appointment (Student)", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{baseUrl}}/api/office-hours/appointments", "host": [ "{{baseUrl}}" ], "path": [ "api", "office-hours", "appointments" ] }, "body": { "mode": "raw", "raw": "{\n \"slotId\": 1,\n \"appointmentDate\": \"2026-05-15\",\n \"topic\": \"Help with project setup\",\n \"notes\": \"I am stuck on step 2\"\n}", "options": { "raw": { "language": "json" } } } }, "response": [] }, { "name": "Update/Confirm Appointment (Instructor)", "request": { "method": "PATCH", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{baseUrl}}/api/office-hours/appointments/1", "host": [ "{{baseUrl}}" ], "path": [ "api", "office-hours", "appointments", "1" ] }, "body": { "mode": "raw", "raw": "{\n \"status\": \"confirmed\"\n}", "options": { "raw": { "language": "json" } } } }, "response": [] }, { "name": "Cancel Appointment (Student)", "request": { "method": "DELETE", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/office-hours/appointments/1", "host": [ "{{baseUrl}}" ], "path": [ "api", "office-hours", "appointments", "1" ] } }, "response": [] } ] }, { "name": "🟡 Peer Review", "item": [ { "name": "Get Module Reviews (Admin)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{admin_token}}" } ], "url": { "raw": "{{baseUrl}}/api/peer-reviews", "host": [ "{{baseUrl}}" ], "path": [ "api", "peer-reviews" ] } }, "response": [] }, { "name": "Get My Pending Reviews to do", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/peer-reviews/pending", "host": [ "{{baseUrl}}" ], "path": [ "api", "peer-reviews", "pending" ] } }, "response": [] }, { "name": "Get Reviews I Received", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" } ], "url": { "raw": "{{baseUrl}}/api/peer-reviews/received", "host": [ "{{baseUrl}}" ], "path": [ "api", "peer-reviews", "received" ] } }, "response": [] }, { "name": "Assign Peer Reviews (Instructor)", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{baseUrl}}/api/peer-reviews/assign", "host": [ "{{baseUrl}}" ], "path": [ "api", "peer-reviews", "assign" ] }, "body": { "mode": "raw", "raw": "{\n \"assignmentId\": 1,\n \"reviewersPerSubmission\": 2\n}", "options": { "raw": { "language": "json" } } } }, "response": [] }, { "name": "Get Assignment Review Summary", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{instructor_token}}" } ], "url": { "raw": "{{baseUrl}}/api/peer-reviews/assignment/1/summary", "host": [ "{{baseUrl}}" ], "path": [ "api", "peer-reviews", "assignment", "1", "summary" ] } }, "response": [] }, { "name": "Submit Review (Student)", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{student_token}}" }, { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{baseUrl}}/api/peer-reviews/1/submit", "host": [ "{{baseUrl}}" ], "path": [ "api", "peer-reviews", "1", "submit" ] }, "body": { "mode": "raw", "raw": "{\n \"reviewText\": \"Great job, well written codebase.\",\n \"rating\": 9,\n \"criteriaScores\": {\n \"structure\": 9,\n \"logic\": 10\n }\n}", "options": { "raw": { "language": "json" } } } }, "response": [] } ] } ] }