##Цель Сделать REST API и страничку на которой будет отображаться дерево комментариев из БД с возможностью создавать новые комментарии и некоторые другие возможности из описания задания.
##Требования
- Оформить проект и его структуру так, как вы делали бы это на большом highload проекте.
- Всё взаимодействие с данными для странички должно быть реализовано через ajax.
- Для фронтэнда желательно не использовать фреймворки. Но если использование фреймворка будет оправдано - то можно.
- В качестве СУБД использовать MongoDB.
- Для REST API написать как минимум 3 интеграционных теста (1).
- Проект должен быть оформлен так, чтобы он начал работать после этого:
npm i
npm test
# тут должно быть как минимум 3 теста и желательно, чтобы они завершились успехом.
rm -rf node_modules
npm i --prod
npm start
При условии, что MongoDB и Node.js уже установлены
- Требований по кроссбраузерности нет, будет достаточно, чтобы решение работало в последней версии Google Chrome.
- Требований по версии Node.js и MongoDB нет, главное, чтобы они без проблем устанавливались из официальных репозиториев для Ubuntu 14.04.
- Для REST API можно использовать любые модули из npm.
(1) - можно почитать на википедии, но в общем смысле - это тест, который делает запрос к REST API имитируя действия пользователя.
##Описание задания ###Backend
- Должен быть реализован REST API.
- Сделать регистрацию и авторизацию через логин с паролем.
- Методы для создания и получения списка комментариев.
- Метод, который рассчитывает максимальный уровень вложенности в дереве комментариев. Уровень комментария в модели хранить нельзя, метод должен рассчитывать его.
- Метод, который будет возвращать массив пользователей с количеством их комментариев и этот массив должен быть отсортирован по убыванию количества комментариев (пользователь с наибольшим количеством комментариев должен быть всегда сверху). Желательно реализовать одним запросом к БД.
###Frontend
- Должно отображаться дерево комментариев.
- На любой комментарий можно оставить ответ.
- Должно отображаться общее количество комментариев на странице.
- Должна отображаться информация, которая приходит в ответе за запросы методов 4 и 5 из бэкэнда.
##Пожелания
- В файле package.json установить требование к Node.js в соответствии с https://docs.npmjs.com/files/package.json, так мы узнаем о требовании к версии Node.js. А требования к версии MongoDB можно будет сообщить отдельно в письме.
Пожелания к использованию модулей:
- https://www.npmjs.com/package/jsonwebtoken
- https://www.npmjs.com/package/gulp
- https://www.npmjs.com/package/chai
- https://www.npmjs.com/package/passport
- https://www.npmjs.com/package/mongoose
Их использование не обязательно, можно использовать другие, аналогичные модули. Если вам не жалко времени, можно вообще всё самому сделать без использования модулей. Например, для того чтобы писать и запускать тесты не обязательно использовать gulp и chai, достаточно нативного assert и правильно оформленного scripts.test
в package.json
.
##Примечание Задание на frontend тут есть потому, что каждый backend-разработчик должен иметь хорошее представление о том как можно использовать свою работу и уметь работать с backend-ом хотя бы на простейшем уровне. Структуру хранения комментариев в БД можно выбрать любую, но нужно будет обосновать своё решение, указать на плюсы и минусы вашего решения.
Алгоритм подсчёта 4 и 5 метдов backend-а так же можно реализовать разными способами. При обсуждении вашего решения хотелось бы узнать чем вы руководствовались выбирая механизм/алгоритм рассчёта.