Skip to content

Прохождение курса внутри темы

Нажимаем на тему в меню курса.

Запрашиваем тему: GET /api/v1/view/course/theme/{theme_id} Внутри находятся блоки, которые отрисовываются в списке блоков. По параметру passed внутри блока помечаем блоки в списке, как пройденные.

Тип прохождения

Свободный

Все блоки в списке доступны для прохождения сразу.

Выбирается первый блок, либо указанный в url.

[Здесь нужно отправить незаметный запрос с {block_id}, чтобы получить данные о прохождении блока. По аналогии GET /api/v1/view/course/block/{model_id}, но без получения всех данных блока, так как и так получаются в теме. В результате получаем passed: true | false и если true, то помечаем блок в списке, как пройденный.]

После выбора блока дальнейшие действия зависят от его типа. Если блок текстовый или видео, то его данные у нас есть и мы его показываем. Запрос GET /api/v1/view/course/block/{model_id} вернул passed: true и мы помечаем блок в списке.

Если блок - вопрос, то данных по нему у нас в теме нет и нужно их получить по запросу POST api/v1/test/result. Пока вопрос не загрузился, показываем плейсхолдер загрузки.

После ответа на вопрос по запросу PUT test/result/block/${resultId}, получаем внутри passed: true | false в зависимости от ответа. Если ответ верный и passed: true, то отмечаем текущий блок в списке.

Адаптивная

От свободной темы прохождение отличается тем, что блоки открываются последовательно, по мере прохождения.

Первый блок в списке блоков должен прийти с данными, чтобы его сразу можно было показывать без загрузок. В блоках имеется параметр adaptive_disabled: true | false от которого зависят

Выбирается первый блок, либо указанный в url (если у него adaptive_disabled: false, иначе показываем крайний справа по доступности).

[Здесь нужно отправить незаметный запрос с {block_id}, чтобы получить данные о прохождении блока. По аналогии GET /api/v1/view/course/block/{model_id}, но без получения всех данных блока. В результате получаем passed: true | false и если true, то помечаем блок в списке, как пройденный.]

Если passed: true, то сразу запрашиваем по GET /api/v1/view/course/block/{model_id} следующий блок, чтобы для пользователя процесс загрузки был максимально незаметен. При переходе на следующий блок он сразу же показывается, запрашивается прохождение и если passed: true, то следующий блок. И так далее.

Если блок оказался не прогружен, то, ничего не поделаешь, отправляем GET /api/v1/view/course/block/{model_id} и показываем загрузку.

Если блок - вопрос, то данных по нему у нас в теме нет и нужно их получить по запросу POST api/v1/test/result. Пока вопрос не загрузился, показываем плейсхолдер загрузки.

После ответа на вопрос по запросу PUT test/result/block/${resultId}, получаем внутри passed: true | false в зависимости от ответа. Если ответ верный и passed: true, то отмечаем текущий блок в списке и сразу запрашиваем следующий блок в цепочке.