📢 Announcement

Kick off

Fedor Borshev
Fedor Borshev
Привет!

У нашей школы есть своя LMS. Она 100500 раз меньше, чем LMS Вебиума, но нам хватает. Сейчас у неё есть три применения — просмотр материалов, редактирование профиля студента (важно для дипломов) и работа с домашками.

Проблема в том, что код нашей LMS — говно: как с точки зрения вёрстки, так и с точки зрения компонентов.

Хочу переписать его нормально и понятно. Предлагаю работать без макетов и использовать в качестве отправной точки текущее состояние LMS — прямо заходить и нормально верстать\разбивать на компоненты. Расскажу о функциональности, которая уже есть.

Беспарольный и парольный вход

Тут вроде понятно — можно либо запросить с бекенда ссылку для входа с одноразовым токеном, либо ввести логин\пароль.

Аунтификация у нас привычная, на JWT.

Ошибочные состояния сейчас проработаны плохо. Исполнителю предлагается проработать это самостоятельно.

Профиль студента

По адресу https://lms.tough-dev.school/profile студент может редактировать профиль — пол, имя на русском и английском, ссылку на гитхаб и телеграм.

Просмотр материалов курсов

При входе пользователю надо показывать главную страницу последнего курса, который он купил. Это тоже довольно просто — бекенд знает все эти курсы.

Если купленного курса нет — надо показывать страницу, в которой мы предлагаем перейти на сайт и купить курс.

Материалы почти всех курсов мы храним в LMS. Своего редактора контента у нас нет — мы просто пишем всё в ноушене и через хитрый ревёрс-инжениринг и кеш отдаём это на фронт. Получается, что мы спокойно работаем в ноушене — пишем, форматируем, комментим, а оно всё «само» появляется в LMS. Материалы курса перелинкованы друг с другом.

На фронте рендерим материалы при помощи [vue-notion](https://github.com/janniks/vue-notion), на беке мы по мотивам [notion-api-worker](https://github.com/splitbee/notion-api-worker) ревёрс-инженирнули API ноушена и отдаём на фронт.

Важно — бек сейчас у отдаёт 404 на все ошибки при просмотре материала:
  • Когда у ученика нет доступа к курсу с этим материалом
  • Когда страница с материлом не расшарена для веба
  • Когда введена страница, которой нет в системе\в ноущене.

Надо будет сделать нормальную обработку ошибок, сейчас её нет. Отдельно нужно предусмотреть сценарий, при котором у пользователя нормально загрузился один материал, но при переходе на другой материал ему, по недосмотру редактора, отдаётся 404.

Пример страницы с материалами — https://lms.tough-dev.school/materials/b7354aa250ef4241aa2513dcc7e6f7d8/

Домашка

На большинстве курсов студенты делают домашку. Как сущность домашка — это просто текст, типа «вспомните свой последний провал в переговорах. Какие тезисы из курса вы бы применили на этих переговоров». Студенты дают ответы на домашку в виде такого же текста. Иногда мы запускаем кросс-проверку — присылаем каждому студенту 3–5 домашек других студентов, на которые он даёт ответ.

Ответы на домашку устроены в виде древовидных комментов — у каждой домашки может быть сколько угодно детей — таких же домашек, со своими детьми. Зная UUID домашки, её может посмотреть кто угодно — это сделано, чтобы студенты могли обмениваться друг с другом ссылками на свои домашки и комментить их.

Как редактор мы сейчас используем [SimpleMDE](https://simplemde.com). Он, хотя и корявый, но вроде работает норм. По-идее, если просто перетащить весь компонент редактора в новый проект, всё будет работать.

Сценарии работы с домашкой

Даём ответ на домашку
Студент получил ссылку на домашку. По ссылке видит задание «вспомните свой последний провал в переговорах. Какие тезисы из курса вы бы применили на этих переговоров». Даёт ответ в редакторе.

После дачи ответа он видит свой текст в правильном оформлении, может в течение 30 минут его отредактировать. В течение 10 минут — удалить.

Может поделиться домашкой — скопировать ссылку из адресной строки. Если любой аунтифицированный пользователь перейдёт по этой ссылке — он увидит его домашку.

Пример такой страницы — https://lms.tough-dev.school/homework/answers/5daf0598-b2f8-4450-8746-8057a4a4ad60

Проверяем чужую домашку
Студент получает в чате или почте одну или несколько ссылок на чужие домашки. Переходя по ссылке он видит ответ домашку и все чужие комментарии к нему.

Студент может дать ответ как на домашку, так и на любой другой комментарий. Как только появляется ответ — все причастные к домашке студенты получают уведомления (это уже работает на беке)

В течение 10 минут ответ на домашку можно удалить, в течение 30 минут — отредактировать.

Эксперт проверяет домашку
Раз в неделю в домашку по прямой ссылке (/question-admin/<homework_slug>/) заходит эксперт. Он видит все ответы всех студентов, без комментариев (чтобы страница грузилась не супер-долго).

Может зайти в каждую домашку (откроется такая же страница, как для всех других) и дать ответ.

Никакого учёта, ответил уже эксперт на конкретную домашку или нет, не ведётся. Сделаем в будущем.

Пример страницы эксперта — https://lms.tough-dev.school/homework/question-admin/58f234f3-3539-475a-8e1b-3680f59cdd44/


Что я хочу от разработки

  • Mobile-first LMS
  • Хороший UI-kit на основе текущего
  • Нормальный код с тестами
  • Opensource. Пока работаем в закрытой репе, открывать будем прямо перед запуском.
В качестве бекенда предлагаю использовать тот, что сейчас лежит проде. Все нужные доступы передам. Код текущей LMS лежит тут