458 lines
16 KiB
JSON
458 lines
16 KiB
JSON
{
|
|
"info": {
|
|
"_postman_id": "f7c2e4a1-8b3d-4e9f-a2c6-11dd99ee5501",
|
|
"name": "Yimaru Exam Prep (Duolingo)",
|
|
"description": "Exam-prep tree API (`/api/v1/exam-prep/...`): catalog courses → units → modules → lessons → practices. Requires Bearer token.\n\n**Courses** = `catalog-courses` in the backend. Set collection variables before chaining requests.",
|
|
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
|
|
},
|
|
"auth": {
|
|
"type": "bearer",
|
|
"bearer": [
|
|
{
|
|
"key": "token",
|
|
"value": "{{accessToken}}",
|
|
"type": "string"
|
|
}
|
|
]
|
|
},
|
|
"variable": [
|
|
{
|
|
"key": "baseUrl",
|
|
"value": "http://localhost:8080"
|
|
},
|
|
{
|
|
"key": "accessToken",
|
|
"value": ""
|
|
},
|
|
{
|
|
"key": "catalogCourseId",
|
|
"value": "1"
|
|
},
|
|
{
|
|
"key": "unitId",
|
|
"value": "1"
|
|
},
|
|
{
|
|
"key": "moduleId",
|
|
"value": "1"
|
|
},
|
|
{
|
|
"key": "lessonId",
|
|
"value": "1"
|
|
},
|
|
{
|
|
"key": "practiceId",
|
|
"value": "1"
|
|
}
|
|
],
|
|
"item": [
|
|
{
|
|
"name": "Duolingo",
|
|
"item": [
|
|
{
|
|
"name": "Courses",
|
|
"description": "Backend route group: **`catalog-courses`** (`exam_prep.catalog_courses.*`)",
|
|
"item": [
|
|
{
|
|
"name": "Create catalog course",
|
|
"request": {
|
|
"method": "POST",
|
|
"header": [
|
|
{
|
|
"key": "Content-Type",
|
|
"value": "application/json"
|
|
}
|
|
],
|
|
"body": {
|
|
"mode": "raw",
|
|
"raw": "{\n \"name\": \"IELTS Prep\",\n \"description\": \"Optional description\",\n \"thumbnail\": null\n}"
|
|
},
|
|
"url": "{{baseUrl}}/api/v1/exam-prep/catalog-courses",
|
|
"description": "Permission: `exam_prep.catalog_courses.create`"
|
|
}
|
|
},
|
|
{
|
|
"name": "List catalog courses",
|
|
"request": {
|
|
"method": "GET",
|
|
"url": "{{baseUrl}}/api/v1/exam-prep/catalog-courses?limit=20&offset=0",
|
|
"description": "Permission: `exam_prep.catalog_courses.list`"
|
|
}
|
|
},
|
|
{
|
|
"name": "Reorder catalog courses",
|
|
"request": {
|
|
"method": "PUT",
|
|
"header": [
|
|
{
|
|
"key": "Content-Type",
|
|
"value": "application/json"
|
|
}
|
|
],
|
|
"body": {
|
|
"mode": "raw",
|
|
"raw": "{\n \"ordered_ids\": [1, 2, 3]\n}"
|
|
},
|
|
"url": "{{baseUrl}}/api/v1/exam-prep/catalog-courses/reorder",
|
|
"description": "Permission: `exam_prep.catalog_courses.reorder`. Must include every id in scope exactly once."
|
|
}
|
|
},
|
|
{
|
|
"name": "Get catalog course by ID",
|
|
"request": {
|
|
"method": "GET",
|
|
"url": "{{baseUrl}}/api/v1/exam-prep/catalog-courses/{{catalogCourseId}}",
|
|
"description": "Permission: `exam_prep.catalog_courses.get`"
|
|
}
|
|
},
|
|
{
|
|
"name": "Update catalog course",
|
|
"request": {
|
|
"method": "PUT",
|
|
"header": [
|
|
{
|
|
"key": "Content-Type",
|
|
"value": "application/json"
|
|
}
|
|
],
|
|
"body": {
|
|
"mode": "raw",
|
|
"raw": "{\n \"name\": \"Updated name\",\n \"description\": null,\n \"thumbnail\": null,\n \"sort_order\": 1\n}"
|
|
},
|
|
"url": "{{baseUrl}}/api/v1/exam-prep/catalog-courses/{{catalogCourseId}}",
|
|
"description": "Permission: `exam_prep.catalog_courses.update`"
|
|
}
|
|
},
|
|
{
|
|
"name": "Delete catalog course",
|
|
"request": {
|
|
"method": "DELETE",
|
|
"url": "{{baseUrl}}/api/v1/exam-prep/catalog-courses/{{catalogCourseId}}",
|
|
"description": "Permission: `exam_prep.catalog_courses.delete`"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "Units",
|
|
"description": "Nested under catalog course (`exam_prep.units.*`)",
|
|
"item": [
|
|
{
|
|
"name": "Create unit",
|
|
"request": {
|
|
"method": "POST",
|
|
"header": [
|
|
{
|
|
"key": "Content-Type",
|
|
"value": "application/json"
|
|
}
|
|
],
|
|
"body": {
|
|
"mode": "raw",
|
|
"raw": "{\n \"name\": \"Grammar foundations\",\n \"description\": null,\n \"thumbnail\": null\n}"
|
|
},
|
|
"url": "{{baseUrl}}/api/v1/exam-prep/catalog-courses/{{catalogCourseId}}/units",
|
|
"description": "Permission: `exam_prep.units.create`"
|
|
}
|
|
},
|
|
{
|
|
"name": "List units by catalog course",
|
|
"request": {
|
|
"method": "GET",
|
|
"url": "{{baseUrl}}/api/v1/exam-prep/catalog-courses/{{catalogCourseId}}/units?limit=20&offset=0",
|
|
"description": "Permission: `exam_prep.units.list`"
|
|
}
|
|
},
|
|
{
|
|
"name": "Reorder units in catalog course",
|
|
"request": {
|
|
"method": "PUT",
|
|
"header": [
|
|
{
|
|
"key": "Content-Type",
|
|
"value": "application/json"
|
|
}
|
|
],
|
|
"body": {
|
|
"mode": "raw",
|
|
"raw": "{\n \"ordered_ids\": [1, 2, 3]\n}"
|
|
},
|
|
"url": "{{baseUrl}}/api/v1/exam-prep/catalog-courses/{{catalogCourseId}}/units/reorder",
|
|
"description": "Permission: `exam_prep.units.reorder`"
|
|
}
|
|
},
|
|
{
|
|
"name": "Get unit by ID",
|
|
"request": {
|
|
"method": "GET",
|
|
"url": "{{baseUrl}}/api/v1/exam-prep/units/{{unitId}}",
|
|
"description": "Permission: `exam_prep.units.get`"
|
|
}
|
|
},
|
|
{
|
|
"name": "Update unit",
|
|
"request": {
|
|
"method": "PUT",
|
|
"header": [
|
|
{
|
|
"key": "Content-Type",
|
|
"value": "application/json"
|
|
}
|
|
],
|
|
"body": {
|
|
"mode": "raw",
|
|
"raw": "{\n \"name\": \"Updated unit\",\n \"description\": null,\n \"thumbnail\": null,\n \"sort_order\": 1\n}"
|
|
},
|
|
"url": "{{baseUrl}}/api/v1/exam-prep/units/{{unitId}}",
|
|
"description": "Permission: `exam_prep.units.update`"
|
|
}
|
|
},
|
|
{
|
|
"name": "Delete unit",
|
|
"request": {
|
|
"method": "DELETE",
|
|
"url": "{{baseUrl}}/api/v1/exam-prep/units/{{unitId}}",
|
|
"description": "Permission: `exam_prep.units.delete`"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "Modules",
|
|
"description": "Exam-prep **`unit_modules`** (`exam_prep.modules.*`)",
|
|
"item": [
|
|
{
|
|
"name": "Create module",
|
|
"request": {
|
|
"method": "POST",
|
|
"header": [
|
|
{
|
|
"key": "Content-Type",
|
|
"value": "application/json"
|
|
}
|
|
],
|
|
"body": {
|
|
"mode": "raw",
|
|
"raw": "{\n \"name\": \"Present tense\",\n \"description\": null,\n \"thumbnail\": null,\n \"icon\": null\n}"
|
|
},
|
|
"url": "{{baseUrl}}/api/v1/exam-prep/units/{{unitId}}/modules",
|
|
"description": "Permission: `exam_prep.modules.create`"
|
|
}
|
|
},
|
|
{
|
|
"name": "List modules by unit",
|
|
"request": {
|
|
"method": "GET",
|
|
"url": "{{baseUrl}}/api/v1/exam-prep/units/{{unitId}}/modules?limit=20&offset=0",
|
|
"description": "Permission: `exam_prep.modules.list`"
|
|
}
|
|
},
|
|
{
|
|
"name": "Reorder modules in unit",
|
|
"request": {
|
|
"method": "PUT",
|
|
"header": [
|
|
{
|
|
"key": "Content-Type",
|
|
"value": "application/json"
|
|
}
|
|
],
|
|
"body": {
|
|
"mode": "raw",
|
|
"raw": "{\n \"ordered_ids\": [1, 2, 3]\n}"
|
|
},
|
|
"url": "{{baseUrl}}/api/v1/exam-prep/units/{{unitId}}/modules/reorder",
|
|
"description": "Permission: `exam_prep.modules.reorder`"
|
|
}
|
|
},
|
|
{
|
|
"name": "Get module by ID",
|
|
"request": {
|
|
"method": "GET",
|
|
"url": "{{baseUrl}}/api/v1/exam-prep/modules/{{moduleId}}",
|
|
"description": "Permission: `exam_prep.modules.get`"
|
|
}
|
|
},
|
|
{
|
|
"name": "Update module",
|
|
"request": {
|
|
"method": "PUT",
|
|
"header": [
|
|
{
|
|
"key": "Content-Type",
|
|
"value": "application/json"
|
|
}
|
|
],
|
|
"body": {
|
|
"mode": "raw",
|
|
"raw": "{\n \"name\": \"Updated module\",\n \"description\": null,\n \"thumbnail\": null,\n \"icon\": null,\n \"sort_order\": 1\n}"
|
|
},
|
|
"url": "{{baseUrl}}/api/v1/exam-prep/modules/{{moduleId}}",
|
|
"description": "Permission: `exam_prep.modules.update`"
|
|
}
|
|
},
|
|
{
|
|
"name": "Delete module",
|
|
"request": {
|
|
"method": "DELETE",
|
|
"url": "{{baseUrl}}/api/v1/exam-prep/modules/{{moduleId}}",
|
|
"description": "Permission: `exam_prep.modules.delete`"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "Lessons",
|
|
"description": "`exam_prep.lessons.*`",
|
|
"item": [
|
|
{
|
|
"name": "Create lesson",
|
|
"request": {
|
|
"method": "POST",
|
|
"header": [
|
|
{
|
|
"key": "Content-Type",
|
|
"value": "application/json"
|
|
}
|
|
],
|
|
"body": {
|
|
"mode": "raw",
|
|
"raw": "{\n \"title\": \"Intro video\",\n \"video_url\": \"https://example.com/video\",\n \"thumbnail\": null,\n \"description\": null\n}"
|
|
},
|
|
"url": "{{baseUrl}}/api/v1/exam-prep/modules/{{moduleId}}/lessons",
|
|
"description": "Permission: `exam_prep.lessons.create`"
|
|
}
|
|
},
|
|
{
|
|
"name": "List lessons by module",
|
|
"request": {
|
|
"method": "GET",
|
|
"url": "{{baseUrl}}/api/v1/exam-prep/modules/{{moduleId}}/lessons?limit=20&offset=0",
|
|
"description": "Permission: `exam_prep.lessons.list_by_module`"
|
|
}
|
|
},
|
|
{
|
|
"name": "Reorder lessons in module",
|
|
"request": {
|
|
"method": "PUT",
|
|
"header": [
|
|
{
|
|
"key": "Content-Type",
|
|
"value": "application/json"
|
|
}
|
|
],
|
|
"body": {
|
|
"mode": "raw",
|
|
"raw": "{\n \"ordered_ids\": [1, 2, 3]\n}"
|
|
},
|
|
"url": "{{baseUrl}}/api/v1/exam-prep/modules/{{moduleId}}/lessons/reorder",
|
|
"description": "Permission: `exam_prep.lessons.reorder`"
|
|
}
|
|
},
|
|
{
|
|
"name": "Get lesson by ID",
|
|
"request": {
|
|
"method": "GET",
|
|
"url": "{{baseUrl}}/api/v1/exam-prep/lessons/{{lessonId}}",
|
|
"description": "Permission: `exam_prep.lessons.get`"
|
|
}
|
|
},
|
|
{
|
|
"name": "Update lesson",
|
|
"request": {
|
|
"method": "PUT",
|
|
"header": [
|
|
{
|
|
"key": "Content-Type",
|
|
"value": "application/json"
|
|
}
|
|
],
|
|
"body": {
|
|
"mode": "raw",
|
|
"raw": "{\n \"title\": \"Updated lesson\",\n \"video_url\": null,\n \"thumbnail\": null,\n \"description\": null,\n \"sort_order\": 1\n}"
|
|
},
|
|
"url": "{{baseUrl}}/api/v1/exam-prep/lessons/{{lessonId}}",
|
|
"description": "Permission: `exam_prep.lessons.update`"
|
|
}
|
|
},
|
|
{
|
|
"name": "Delete lesson",
|
|
"request": {
|
|
"method": "DELETE",
|
|
"url": "{{baseUrl}}/api/v1/exam-prep/lessons/{{lessonId}}",
|
|
"description": "Permission: `exam_prep.lessons.delete`"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "Practices",
|
|
"description": "Tied to lesson; **`question_set_id`** references shared `question_sets`. `exam_prep.practices.*`",
|
|
"item": [
|
|
{
|
|
"name": "Create practice",
|
|
"request": {
|
|
"method": "POST",
|
|
"header": [
|
|
{
|
|
"key": "Content-Type",
|
|
"value": "application/json"
|
|
}
|
|
],
|
|
"body": {
|
|
"mode": "raw",
|
|
"raw": "{\n \"title\": \"Drill: articles\",\n \"story_description\": null,\n \"story_image\": null,\n \"persona_id\": null,\n \"question_set_id\": 1,\n \"quick_tips\": null\n}"
|
|
},
|
|
"url": "{{baseUrl}}/api/v1/exam-prep/lessons/{{lessonId}}/practices",
|
|
"description": "Permission: `exam_prep.practices.create`"
|
|
}
|
|
},
|
|
{
|
|
"name": "List practices by lesson",
|
|
"request": {
|
|
"method": "GET",
|
|
"url": "{{baseUrl}}/api/v1/exam-prep/lessons/{{lessonId}}/practices?limit=20&offset=0",
|
|
"description": "Permission: `exam_prep.practices.list_by_lesson`"
|
|
}
|
|
},
|
|
{
|
|
"name": "Get practice by ID",
|
|
"request": {
|
|
"method": "GET",
|
|
"url": "{{baseUrl}}/api/v1/exam-prep/practices/{{practiceId}}",
|
|
"description": "Permission: `exam_prep.practices.get`"
|
|
}
|
|
},
|
|
{
|
|
"name": "Update practice",
|
|
"request": {
|
|
"method": "PUT",
|
|
"header": [
|
|
{
|
|
"key": "Content-Type",
|
|
"value": "application/json"
|
|
}
|
|
],
|
|
"body": {
|
|
"mode": "raw",
|
|
"raw": "{\n \"title\": \"Updated practice\",\n \"story_description\": null,\n \"story_image\": null,\n \"persona_id\": null,\n \"question_set_id\": 1,\n \"quick_tips\": null\n}"
|
|
},
|
|
"url": "{{baseUrl}}/api/v1/exam-prep/practices/{{practiceId}}",
|
|
"description": "Permission: `exam_prep.practices.update`. Omit fields you do not change."
|
|
}
|
|
},
|
|
{
|
|
"name": "Delete practice",
|
|
"request": {
|
|
"method": "DELETE",
|
|
"url": "{{baseUrl}}/api/v1/exam-prep/practices/{{practiceId}}",
|
|
"description": "Permission: `exam_prep.practices.delete`"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|