Spaces:
Sleeping
Sleeping
| { | |
| "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": [] | |
| } | |
| ] | |
| } | |
| ] | |
| } | |