Небольшой сервис, позволяющий добавлять свои курсы (Products), а также покупать курсы других пользователей.
- Product - сущность продукта (курса). Содержит информацию о названии продукта, его цене, когда он должен начаться, какие минимальное и максимальное количество человек в группе, а также автора этого курса.
- Lesson - сущность урока.Содержит информацию о названии урока, к какому курсу этот урок принадлежит и ссылку на видео.
- Group - сущность группы. В одном курсе может быть несколько групп, алгоритм заполнения групп описан далее. В группе содержится информация о её названии, к какому продукту она принадлежит и какие пользователи в неё входят.
- GET
api/products- возвращает информацию о всех доступных курсах. В неё входит: все поля модели Product, количество уроков в курсе, количество студентов на курсе, % заполненности групп, % пользователей, которые купили этот курс. Данный запрос не требует авторизации от пользователей. Просматривать курсы может кто угодно. - POST
api/products- позволяет добавить свой курс, для этого надо быть авторизированным в системе. - GET
api/products/{id}- получение информации о конкретном курсе с идентификатором id. Если пользователь является автором этого курса, то ему также доступны по этому адресу запросы на удаление и изменение продукта. - GET
api/products/{id}/lessons- уроки, принадлежащие курсу с идентификатором id. Для получения доступа к этому запросу необходимо купить курс или быть автором этого курса. - POST
api/products/{id}/lessons- добавление нового урока к продукту. Доступно только для автора курса. - GET
api/products/{id}/buy- покупка курса. Если пользователь уже приобрёл этот курс ранее, то вернётся сообщение об этом. Иначе пользователь будет добавлен в группу курса по следующему алгоритму, реализованному в app/utils.py :- Если это первый ученик на курсе, то просто создаётся новая группа и пользователь добавляется туда.
- Если группа пока одна и не заполнена до максимального значения, то он будет добавлен в неё.
- Если все группы на курсе заполены, то будет создана новая группа, посчитаны оптимальные количества человек в группах так, чтобы в идеале они не отличались больше, чем на одного человека, если это возможно, учитывая минимальные значения в группах. Затем пользователи из существующих групп будут перемещены, согласно этим оптимальным значениям, и новый пользователь будет добавлен в группу с наименьшим количеством человек.
- Если не все группы на курсе заполнены, то пользователь будет добавлен в первую группу с наименьшим количеством человек.