826 lines
28 KiB
JSON
826 lines
28 KiB
JSON
{
|
|
"info": {
|
|
"_postman_id": "d8d17a29-5f9c-4f06-95fd-12e9862f97f8",
|
|
"name": "Yimaru Backend - Course Management APIs",
|
|
"description": "Fully documented Postman collection for all course-management related endpoints in Yimaru Backend.\n\nAuthentication:\n- All endpoints require `Authorization: Bearer {{accessToken}}`.\n\nBase URL:\n- `{{baseUrl}}/api/{{apiVersion}}`\n\nNotes:\n- IDs in path params must be positive integers.\n- Some update endpoints support partial updates.\n- Endpoint-level permission requirements are documented in each request description.",
|
|
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
|
|
},
|
|
"variable": [
|
|
{
|
|
"key": "baseUrl",
|
|
"value": "https://api.yimaruacademy.com",
|
|
"type": "string"
|
|
},
|
|
{
|
|
"key": "apiVersion",
|
|
"value": "v1",
|
|
"type": "string"
|
|
},
|
|
{
|
|
"key": "accessToken",
|
|
"value": "",
|
|
"type": "string"
|
|
},
|
|
{
|
|
"key": "categoryId",
|
|
"value": "1",
|
|
"type": "string"
|
|
},
|
|
{
|
|
"key": "subCategoryId",
|
|
"value": "1",
|
|
"type": "string"
|
|
},
|
|
{
|
|
"key": "courseId",
|
|
"value": "1",
|
|
"type": "string"
|
|
},
|
|
{
|
|
"key": "levelId",
|
|
"value": "1",
|
|
"type": "string"
|
|
},
|
|
{
|
|
"key": "moduleId",
|
|
"value": "1",
|
|
"type": "string"
|
|
},
|
|
{
|
|
"key": "subModuleId",
|
|
"value": "1",
|
|
"type": "string"
|
|
},
|
|
{
|
|
"key": "videoId",
|
|
"value": "1",
|
|
"type": "string"
|
|
},
|
|
{
|
|
"key": "questionSetId",
|
|
"value": "1",
|
|
"type": "string"
|
|
},
|
|
{
|
|
"key": "practiceId",
|
|
"value": "1",
|
|
"type": "string"
|
|
}
|
|
],
|
|
"auth": {
|
|
"type": "bearer",
|
|
"bearer": [
|
|
{
|
|
"key": "token",
|
|
"value": "{{accessToken}}",
|
|
"type": "string"
|
|
}
|
|
]
|
|
},
|
|
"item": [
|
|
{
|
|
"name": "Categories & Courses",
|
|
"item": [
|
|
{
|
|
"name": "List Course Categories",
|
|
"request": {
|
|
"method": "GET",
|
|
"header": [],
|
|
"url": {
|
|
"raw": "{{baseUrl}}/api/{{apiVersion}}/course-management/categories",
|
|
"host": [
|
|
"{{baseUrl}}"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"{{apiVersion}}",
|
|
"course-management",
|
|
"categories"
|
|
]
|
|
},
|
|
"description": "Returns all course categories.\n\nPermission: `learning_tree.get`."
|
|
}
|
|
},
|
|
{
|
|
"name": "Create Course Category",
|
|
"request": {
|
|
"method": "POST",
|
|
"header": [
|
|
{
|
|
"key": "Content-Type",
|
|
"value": "application/json"
|
|
}
|
|
],
|
|
"body": {
|
|
"mode": "raw",
|
|
"raw": "{\n \"name\": \"Grammar\",\n \"is_active\": true\n}"
|
|
},
|
|
"url": {
|
|
"raw": "{{baseUrl}}/api/{{apiVersion}}/course-management/categories",
|
|
"host": [
|
|
"{{baseUrl}}"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"{{apiVersion}}",
|
|
"course-management",
|
|
"categories"
|
|
]
|
|
},
|
|
"description": "Creates a course category.\n\nRequired fields:\n- `name` (string)\n\nOptional fields:\n- `is_active` (boolean)\n\nPermission: `course_categories.create`."
|
|
}
|
|
},
|
|
{
|
|
"name": "Delete Course Category",
|
|
"request": {
|
|
"method": "DELETE",
|
|
"header": [],
|
|
"url": {
|
|
"raw": "{{baseUrl}}/api/{{apiVersion}}/course-management/categories/{{categoryId}}",
|
|
"host": [
|
|
"{{baseUrl}}"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"{{apiVersion}}",
|
|
"course-management",
|
|
"categories",
|
|
"{{categoryId}}"
|
|
]
|
|
},
|
|
"description": "Deletes a category by ID.\n\nPath params:\n- `categoryId` (int, required)\n\nPermission: `course_categories.delete`."
|
|
}
|
|
},
|
|
{
|
|
"name": "List Courses By Category",
|
|
"request": {
|
|
"method": "GET",
|
|
"header": [],
|
|
"url": {
|
|
"raw": "{{baseUrl}}/api/{{apiVersion}}/course-management/categories/{{categoryId}}/courses?offset=0&limit=50",
|
|
"host": [
|
|
"{{baseUrl}}"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"{{apiVersion}}",
|
|
"course-management",
|
|
"categories",
|
|
"{{categoryId}}",
|
|
"courses"
|
|
],
|
|
"query": [
|
|
{
|
|
"key": "offset",
|
|
"value": "0"
|
|
},
|
|
{
|
|
"key": "limit",
|
|
"value": "50"
|
|
}
|
|
]
|
|
},
|
|
"description": "Returns all courses under a category.\n\nPath params:\n- `categoryId` (int, required)\n\nQuery params:\n- `offset` (int, optional, default 0)\n- `limit` (int, optional, default 10000)\n\nPermission: `learning_tree.get`."
|
|
}
|
|
},
|
|
{
|
|
"name": "Create Course",
|
|
"request": {
|
|
"method": "POST",
|
|
"header": [
|
|
{
|
|
"key": "Content-Type",
|
|
"value": "application/json"
|
|
}
|
|
],
|
|
"body": {
|
|
"mode": "raw",
|
|
"raw": "{\n \"category_id\": 1,\n \"sub_category_id\": 1,\n \"title\": \"English Basics\",\n \"description\": \"Beginner-level course\",\n \"thumbnail\": \"https://cdn.example.com/course-thumb.jpg\",\n \"intro_video_url\": \"https://cdn.example.com/intro.mp4\",\n \"is_active\": true\n}"
|
|
},
|
|
"url": {
|
|
"raw": "{{baseUrl}}/api/{{apiVersion}}/course-management/courses",
|
|
"host": [
|
|
"{{baseUrl}}"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"{{apiVersion}}",
|
|
"course-management",
|
|
"courses"
|
|
]
|
|
},
|
|
"description": "Creates a course.\n\nRequired fields:\n- `category_id` (int)\n- `title` (string)\n\nOptional fields:\n- `sub_category_id` (int)\n- `description` (string)\n- `thumbnail` (string URL)\n- `intro_video_url` (string URL)\n- `is_active` (boolean)\n\nPermission: `courses.create`."
|
|
}
|
|
},
|
|
{
|
|
"name": "Update Course",
|
|
"request": {
|
|
"method": "PUT",
|
|
"header": [
|
|
{
|
|
"key": "Content-Type",
|
|
"value": "application/json"
|
|
}
|
|
],
|
|
"body": {
|
|
"mode": "raw",
|
|
"raw": "{\n \"title\": \"English Basics - Updated\",\n \"description\": \"Updated course description\",\n \"thumbnail\": \"https://cdn.example.com/new-thumb.jpg\",\n \"intro_video_url\": \"https://cdn.example.com/new-intro.mp4\",\n \"is_active\": true\n}"
|
|
},
|
|
"url": {
|
|
"raw": "{{baseUrl}}/api/{{apiVersion}}/course-management/courses/{{courseId}}",
|
|
"host": [
|
|
"{{baseUrl}}"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"{{apiVersion}}",
|
|
"course-management",
|
|
"courses",
|
|
"{{courseId}}"
|
|
]
|
|
},
|
|
"description": "Updates an existing course (partial update accepted).\n\nPath params:\n- `courseId` (int, required)\n\nOptional fields:\n- `title`, `description`, `thumbnail`, `intro_video_url`, `is_active`\n\nPermission: `courses.update`."
|
|
}
|
|
},
|
|
{
|
|
"name": "Delete Course",
|
|
"request": {
|
|
"method": "DELETE",
|
|
"header": [],
|
|
"url": {
|
|
"raw": "{{baseUrl}}/api/{{apiVersion}}/course-management/courses/{{courseId}}",
|
|
"host": [
|
|
"{{baseUrl}}"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"{{apiVersion}}",
|
|
"course-management",
|
|
"courses",
|
|
"{{courseId}}"
|
|
]
|
|
},
|
|
"description": "Deletes a course.\n\nPath params:\n- `courseId` (int, required)\n\nPermission: `courses.delete`."
|
|
}
|
|
},
|
|
{
|
|
"name": "Update Course Thumbnail",
|
|
"request": {
|
|
"method": "POST",
|
|
"header": [
|
|
{
|
|
"key": "Content-Type",
|
|
"value": "application/json"
|
|
}
|
|
],
|
|
"body": {
|
|
"mode": "raw",
|
|
"raw": "{\n \"thumbnail_url\": \"https://cdn.example.com/new-thumbnail.jpg\"\n}"
|
|
},
|
|
"url": {
|
|
"raw": "{{baseUrl}}/api/{{apiVersion}}/course-management/courses/{{courseId}}/thumbnail",
|
|
"host": [
|
|
"{{baseUrl}}"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"{{apiVersion}}",
|
|
"course-management",
|
|
"courses",
|
|
"{{courseId}}",
|
|
"thumbnail"
|
|
]
|
|
},
|
|
"description": "Updates only the thumbnail of a course.\n\nPath params:\n- `courseId` (int, required)\n\nRequired fields:\n- `thumbnail_url` (string)\n\nPermission: `courses.upload_thumbnail`."
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "Hierarchy & Learning Path",
|
|
"item": [
|
|
{
|
|
"name": "Get Unified Hierarchy",
|
|
"request": {
|
|
"method": "GET",
|
|
"header": [],
|
|
"url": {
|
|
"raw": "{{baseUrl}}/api/{{apiVersion}}/course-management/hierarchy",
|
|
"host": [
|
|
"{{baseUrl}}"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"{{apiVersion}}",
|
|
"course-management",
|
|
"hierarchy"
|
|
]
|
|
},
|
|
"description": "Returns global hierarchy data.\n\nPermission: `learning_tree.get`."
|
|
}
|
|
},
|
|
{
|
|
"name": "Get Human Language Hierarchy",
|
|
"request": {
|
|
"method": "GET",
|
|
"header": [],
|
|
"url": {
|
|
"raw": "{{baseUrl}}/api/{{apiVersion}}/course-management/human-language/hierarchy",
|
|
"host": [
|
|
"{{baseUrl}}"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"{{apiVersion}}",
|
|
"course-management",
|
|
"human-language",
|
|
"hierarchy"
|
|
]
|
|
},
|
|
"description": "Alias endpoint for unified hierarchy under human-language path.\n\nPermission: `learning_tree.get`."
|
|
}
|
|
},
|
|
{
|
|
"name": "Get Course Hierarchy",
|
|
"request": {
|
|
"method": "GET",
|
|
"header": [],
|
|
"url": {
|
|
"raw": "{{baseUrl}}/api/{{apiVersion}}/course-management/courses/{{courseId}}/hierarchy",
|
|
"host": [
|
|
"{{baseUrl}}"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"{{apiVersion}}",
|
|
"course-management",
|
|
"courses",
|
|
"{{courseId}}",
|
|
"hierarchy"
|
|
]
|
|
},
|
|
"description": "Returns hierarchy nodes for one course.\n\nPath params:\n- `courseId` (int, required)\n\nPermission: `learning_tree.get`."
|
|
}
|
|
},
|
|
{
|
|
"name": "Get Course Learning Path",
|
|
"request": {
|
|
"method": "GET",
|
|
"header": [],
|
|
"url": {
|
|
"raw": "{{baseUrl}}/api/{{apiVersion}}/course-management/courses/{{courseId}}/learning-path",
|
|
"host": [
|
|
"{{baseUrl}}"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"{{apiVersion}}",
|
|
"course-management",
|
|
"courses",
|
|
"{{courseId}}",
|
|
"learning-path"
|
|
]
|
|
},
|
|
"description": "Returns learning-path projection for a course including sub-modules, videos, and practices.\n\nPath params:\n- `courseId` (int, required)\n\nPermission: `learning_tree.get`."
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "Sub-Categories, Levels, Modules, Sub-Modules",
|
|
"item": [
|
|
{
|
|
"name": "Create Course Sub-Category",
|
|
"request": {
|
|
"method": "POST",
|
|
"header": [
|
|
{
|
|
"key": "Content-Type",
|
|
"value": "application/json"
|
|
}
|
|
],
|
|
"body": {
|
|
"mode": "raw",
|
|
"raw": "{\n \"category_id\": 1,\n \"name\": \"Everyday Conversation\",\n \"description\": \"Spoken communication track\",\n \"display_order\": 1,\n \"is_active\": true\n}"
|
|
},
|
|
"url": {
|
|
"raw": "{{baseUrl}}/api/{{apiVersion}}/course-management/sub-categories",
|
|
"host": [
|
|
"{{baseUrl}}"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"{{apiVersion}}",
|
|
"course-management",
|
|
"sub-categories"
|
|
]
|
|
},
|
|
"description": "Creates a sub-category under a course category.\n\nRequired fields:\n- `category_id` (int)\n- `name` (string)\n\nOptional fields:\n- `description` (string)\n- `display_order` (int)\n- `is_active` (boolean)\n\nPermission: `course_categories.create`."
|
|
}
|
|
},
|
|
{
|
|
"name": "Delete Course Sub-Category",
|
|
"request": {
|
|
"method": "DELETE",
|
|
"header": [],
|
|
"url": {
|
|
"raw": "{{baseUrl}}/api/{{apiVersion}}/course-management/sub-categories/{{subCategoryId}}",
|
|
"host": [
|
|
"{{baseUrl}}"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"{{apiVersion}}",
|
|
"course-management",
|
|
"sub-categories",
|
|
"{{subCategoryId}}"
|
|
]
|
|
},
|
|
"description": "Deletes a sub-category.\n\nPath params:\n- `subCategoryId` (int, required)\n\nPermission: `course_categories.delete`."
|
|
}
|
|
},
|
|
{
|
|
"name": "Create Level",
|
|
"request": {
|
|
"method": "POST",
|
|
"header": [
|
|
{
|
|
"key": "Content-Type",
|
|
"value": "application/json"
|
|
}
|
|
],
|
|
"body": {
|
|
"mode": "raw",
|
|
"raw": "{\n \"course_id\": 1,\n \"cefr_level\": \"A1\",\n \"display_order\": 1,\n \"is_active\": true\n}"
|
|
},
|
|
"url": {
|
|
"raw": "{{baseUrl}}/api/{{apiVersion}}/course-management/levels",
|
|
"host": [
|
|
"{{baseUrl}}"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"{{apiVersion}}",
|
|
"course-management",
|
|
"levels"
|
|
]
|
|
},
|
|
"description": "Creates a CEFR level under a course.\n\nRequired fields:\n- `course_id` (int)\n- `cefr_level` (one of: A1, A2, A3, B1, B2, B3, C1, C2, C3)\n\nOptional fields:\n- `display_order` (int)\n- `is_active` (boolean)\n\nPermission: `subcourses.create`."
|
|
}
|
|
},
|
|
{
|
|
"name": "Create Module",
|
|
"request": {
|
|
"method": "POST",
|
|
"header": [
|
|
{
|
|
"key": "Content-Type",
|
|
"value": "application/json"
|
|
}
|
|
],
|
|
"body": {
|
|
"mode": "raw",
|
|
"raw": "{\n \"level_id\": 1,\n \"title\": \"Module 1: Introductions\",\n \"description\": \"Core introduction module\",\n \"display_order\": 1,\n \"is_active\": true\n}"
|
|
},
|
|
"url": {
|
|
"raw": "{{baseUrl}}/api/{{apiVersion}}/course-management/modules",
|
|
"host": [
|
|
"{{baseUrl}}"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"{{apiVersion}}",
|
|
"course-management",
|
|
"modules"
|
|
]
|
|
},
|
|
"description": "Creates a module under a level.\n\nRequired fields:\n- `level_id` (int)\n- `title` (string)\n\nOptional fields:\n- `description`, `display_order`, `is_active`\n\nPermission: `subcourses.create`."
|
|
}
|
|
},
|
|
{
|
|
"name": "Delete Module",
|
|
"request": {
|
|
"method": "DELETE",
|
|
"header": [],
|
|
"url": {
|
|
"raw": "{{baseUrl}}/api/{{apiVersion}}/course-management/modules/{{moduleId}}",
|
|
"host": [
|
|
"{{baseUrl}}"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"{{apiVersion}}",
|
|
"course-management",
|
|
"modules",
|
|
"{{moduleId}}"
|
|
]
|
|
},
|
|
"description": "Deletes a module.\n\nPath params:\n- `moduleId` (int, required)\n\nPermission: `subcourses.delete`."
|
|
}
|
|
},
|
|
{
|
|
"name": "Create Sub-Module",
|
|
"request": {
|
|
"method": "POST",
|
|
"header": [
|
|
{
|
|
"key": "Content-Type",
|
|
"value": "application/json"
|
|
}
|
|
],
|
|
"body": {
|
|
"mode": "raw",
|
|
"raw": "{\n \"module_id\": 1,\n \"title\": \"Sub-Module 1: Greetings\",\n \"description\": \"Greetings and polite expressions\",\n \"display_order\": 1,\n \"is_active\": true\n}"
|
|
},
|
|
"url": {
|
|
"raw": "{{baseUrl}}/api/{{apiVersion}}/course-management/sub-modules",
|
|
"host": [
|
|
"{{baseUrl}}"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"{{apiVersion}}",
|
|
"course-management",
|
|
"sub-modules"
|
|
]
|
|
},
|
|
"description": "Creates a sub-module under a module.\n\nRequired fields:\n- `module_id` (int)\n- `title` (string)\n\nOptional fields:\n- `description`, `display_order`, `is_active`\n\nPermission: `subcourses.create`."
|
|
}
|
|
},
|
|
{
|
|
"name": "Update Sub-Module",
|
|
"request": {
|
|
"method": "PUT",
|
|
"header": [
|
|
{
|
|
"key": "Content-Type",
|
|
"value": "application/json"
|
|
}
|
|
],
|
|
"body": {
|
|
"mode": "raw",
|
|
"raw": "{\n \"title\": \"Sub-Module 1: Greetings (Updated)\",\n \"description\": \"Updated sub-module description\",\n \"is_active\": true\n}"
|
|
},
|
|
"url": {
|
|
"raw": "{{baseUrl}}/api/{{apiVersion}}/course-management/sub-modules/{{subModuleId}}",
|
|
"host": [
|
|
"{{baseUrl}}"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"{{apiVersion}}",
|
|
"course-management",
|
|
"sub-modules",
|
|
"{{subModuleId}}"
|
|
]
|
|
},
|
|
"description": "Updates a sub-module.\n\nPath params:\n- `subModuleId` (int, required)\n\nOptional fields:\n- `title`, `description`, `is_active`\n\nPermission: `subcourses.update`."
|
|
}
|
|
},
|
|
{
|
|
"name": "Delete Sub-Module",
|
|
"request": {
|
|
"method": "DELETE",
|
|
"header": [],
|
|
"url": {
|
|
"raw": "{{baseUrl}}/api/{{apiVersion}}/course-management/sub-modules/{{subModuleId}}",
|
|
"host": [
|
|
"{{baseUrl}}"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"{{apiVersion}}",
|
|
"course-management",
|
|
"sub-modules",
|
|
"{{subModuleId}}"
|
|
]
|
|
},
|
|
"description": "Deletes a sub-module.\n\nPath params:\n- `subModuleId` (int, required)\n\nPermission: `subcourses.delete`."
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "Sub-Module Videos",
|
|
"item": [
|
|
{
|
|
"name": "Get Sub-Module Videos",
|
|
"request": {
|
|
"method": "GET",
|
|
"header": [],
|
|
"url": {
|
|
"raw": "{{baseUrl}}/api/{{apiVersion}}/course-management/sub-modules/{{subModuleId}}/videos",
|
|
"host": [
|
|
"{{baseUrl}}"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"{{apiVersion}}",
|
|
"course-management",
|
|
"sub-modules",
|
|
"{{subModuleId}}",
|
|
"videos"
|
|
]
|
|
},
|
|
"description": "Lists videos for a given sub-module.\n\nPath params:\n- `subModuleId` (int, required)\n\nPermission: `videos.list`."
|
|
}
|
|
},
|
|
{
|
|
"name": "Create Sub-Module Video",
|
|
"request": {
|
|
"method": "POST",
|
|
"header": [
|
|
{
|
|
"key": "Content-Type",
|
|
"value": "application/json"
|
|
}
|
|
],
|
|
"body": {
|
|
"mode": "raw",
|
|
"raw": "{\n \"sub_module_id\": 1,\n \"title\": \"Greeting Expressions\",\n \"description\": \"Main lesson video\",\n \"video_url\": \"https://cdn.example.com/videos/greetings.mp4\",\n \"duration\": 480,\n \"resolution\": \"1080p\",\n \"visibility\": \"public\",\n \"instructor_id\": \"instructor-123\",\n \"thumbnail\": \"https://cdn.example.com/thumbs/greetings.jpg\",\n \"display_order\": 1,\n \"status\": \"published\"\n}"
|
|
},
|
|
"url": {
|
|
"raw": "{{baseUrl}}/api/{{apiVersion}}/course-management/sub-module-videos",
|
|
"host": [
|
|
"{{baseUrl}}"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"{{apiVersion}}",
|
|
"course-management",
|
|
"sub-module-videos"
|
|
]
|
|
},
|
|
"description": "Creates a video under a sub-module.\n\nRequired fields:\n- `sub_module_id` (int)\n- `title` (string)\n- `video_url` (string URL)\n\nOptional fields:\n- `description`, `duration`, `resolution`, `visibility`, `instructor_id`, `thumbnail`, `display_order`, `status`\n\nPermission: `videos.create`."
|
|
}
|
|
},
|
|
{
|
|
"name": "Update Sub-Module Video",
|
|
"request": {
|
|
"method": "PUT",
|
|
"header": [
|
|
{
|
|
"key": "Content-Type",
|
|
"value": "application/json"
|
|
}
|
|
],
|
|
"body": {
|
|
"mode": "raw",
|
|
"raw": "{\n \"title\": \"Greeting Expressions - Updated\",\n \"description\": \"Updated video description\",\n \"video_url\": \"https://cdn.example.com/videos/greetings-v2.mp4\"\n}"
|
|
},
|
|
"url": {
|
|
"raw": "{{baseUrl}}/api/{{apiVersion}}/course-management/sub-module-videos/{{videoId}}",
|
|
"host": [
|
|
"{{baseUrl}}"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"{{apiVersion}}",
|
|
"course-management",
|
|
"sub-module-videos",
|
|
"{{videoId}}"
|
|
]
|
|
},
|
|
"description": "Updates a sub-module video.\n\nPath params:\n- `videoId` (int, required)\n\nRequired fields:\n- `title` (string)\n- `video_url` (string URL)\n\nOptional fields:\n- `description`\n\nPermission: `videos.update`."
|
|
}
|
|
},
|
|
{
|
|
"name": "Delete Sub-Module Video",
|
|
"request": {
|
|
"method": "DELETE",
|
|
"header": [],
|
|
"url": {
|
|
"raw": "{{baseUrl}}/api/{{apiVersion}}/course-management/sub-module-videos/{{videoId}}",
|
|
"host": [
|
|
"{{baseUrl}}"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"{{apiVersion}}",
|
|
"course-management",
|
|
"sub-module-videos",
|
|
"{{videoId}}"
|
|
]
|
|
},
|
|
"description": "Deletes a sub-module video.\n\nPath params:\n- `videoId` (int, required)\n\nPermission: `videos.delete`."
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "Lessons & Practices",
|
|
"item": [
|
|
{
|
|
"name": "Attach Sub-Module Lesson (Question Set)",
|
|
"request": {
|
|
"method": "POST",
|
|
"header": [
|
|
{
|
|
"key": "Content-Type",
|
|
"value": "application/json"
|
|
}
|
|
],
|
|
"body": {
|
|
"mode": "raw",
|
|
"raw": "{\n \"sub_module_id\": 1,\n \"question_set_id\": 1,\n \"intro_video_url\": \"https://cdn.example.com/intro-lesson.mp4\",\n \"display_order\": 1,\n \"is_active\": true\n}"
|
|
},
|
|
"url": {
|
|
"raw": "{{baseUrl}}/api/{{apiVersion}}/course-management/sub-module-lessons",
|
|
"host": [
|
|
"{{baseUrl}}"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"{{apiVersion}}",
|
|
"course-management",
|
|
"sub-module-lessons"
|
|
]
|
|
},
|
|
"description": "Links a question set lesson to a sub-module.\n\nRequired fields:\n- `sub_module_id` (int)\n- `question_set_id` (int)\n\nOptional fields:\n- `intro_video_url`, `display_order`, `is_active`\n\nPermission: `question_sets.update`."
|
|
}
|
|
},
|
|
{
|
|
"name": "Create Sub-Module Practice",
|
|
"request": {
|
|
"method": "POST",
|
|
"header": [
|
|
{
|
|
"key": "Content-Type",
|
|
"value": "application/json"
|
|
}
|
|
],
|
|
"body": {
|
|
"mode": "raw",
|
|
"raw": "{\n \"sub_module_id\": 1,\n \"title\": \"Practice: Basic Greetings\",\n \"description\": \"Practice set for greetings\",\n \"thumbnail\": \"https://cdn.example.com/practice-thumb.jpg\",\n \"intro_video_url\": \"https://cdn.example.com/practice-intro.mp4\",\n \"question_set_id\": 1,\n \"display_order\": 1,\n \"is_active\": true\n}"
|
|
},
|
|
"url": {
|
|
"raw": "{{baseUrl}}/api/{{apiVersion}}/course-management/sub-module-practices",
|
|
"host": [
|
|
"{{baseUrl}}"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"{{apiVersion}}",
|
|
"course-management",
|
|
"sub-module-practices"
|
|
]
|
|
},
|
|
"description": "Creates a practice under a sub-module.\n\nRequired fields:\n- `sub_module_id` (int)\n- `title` (string)\n- `question_set_id` (int)\n\nOptional fields:\n- `description`, `thumbnail`, `intro_video_url`, `display_order`, `is_active`\n\nPermission: `question_sets.update`."
|
|
}
|
|
},
|
|
{
|
|
"name": "Update Practice",
|
|
"request": {
|
|
"method": "PUT",
|
|
"header": [
|
|
{
|
|
"key": "Content-Type",
|
|
"value": "application/json"
|
|
}
|
|
],
|
|
"body": {
|
|
"mode": "raw",
|
|
"raw": "{\n \"title\": \"Practice: Basic Greetings - Updated\",\n \"description\": \"Updated practice details\",\n \"persona\": \"student\",\n \"is_active\": true\n}"
|
|
},
|
|
"url": {
|
|
"raw": "{{baseUrl}}/api/{{apiVersion}}/course-management/practices/{{practiceId}}",
|
|
"host": [
|
|
"{{baseUrl}}"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"{{apiVersion}}",
|
|
"course-management",
|
|
"practices",
|
|
"{{practiceId}}"
|
|
]
|
|
},
|
|
"description": "Updates a practice.\n\nPath params:\n- `practiceId` (int, required)\n\nBehavior:\n- If `is_active` is provided, this endpoint updates practice status.\n- Otherwise, `title` is required and metadata update is applied.\n\nPermission: `question_sets.update`."
|
|
}
|
|
},
|
|
{
|
|
"name": "Delete Practice",
|
|
"request": {
|
|
"method": "DELETE",
|
|
"header": [],
|
|
"url": {
|
|
"raw": "{{baseUrl}}/api/{{apiVersion}}/course-management/practices/{{practiceId}}",
|
|
"host": [
|
|
"{{baseUrl}}"
|
|
],
|
|
"path": [
|
|
"api",
|
|
"{{apiVersion}}",
|
|
"course-management",
|
|
"practices",
|
|
"{{practiceId}}"
|
|
]
|
|
},
|
|
"description": "Deletes a practice.\n\nPath params:\n- `practiceId` (int, required)\n\nPermission: `question_sets.delete`."
|
|
}
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|