Skip to content

Instantly share code, notes, and snippets.

@zbitname
Last active June 1, 2016 12:27
Show Gist options
  • Save zbitname/f274dfe33d117f99259eee43798d43de to your computer and use it in GitHub Desktop.
Save zbitname/f274dfe33d117f99259eee43798d43de to your computer and use it in GitHub Desktop.
Exam #1 for backend developer (Node.js + MongoDB)

##Цель Сделать 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

  1. Должен быть реализован REST API.
  2. Сделать регистрацию и авторизацию через логин с паролем.
  3. Методы для создания и получения списка комментариев.
  4. Метод, который рассчитывает максимальный уровень вложенности в дереве комментариев. Уровень комментария в модели хранить нельзя, метод должен рассчитывать его.
  5. Метод, который будет возвращать массив пользователей с количеством их комментариев и этот массив должен быть отсортирован по убыванию количества комментариев (пользователь с наибольшим количеством комментариев должен быть всегда сверху). Желательно реализовать одним запросом к БД.

###Frontend

  1. Должно отображаться дерево комментариев.
  2. На любой комментарий можно оставить ответ.
  3. Должно отображаться общее количество комментариев на странице.
  4. Должна отображаться информация, которая приходит в ответе за запросы методов 4 и 5 из бэкэнда.

##Пожелания

  • В файле package.json установить требование к Node.js в соответствии с https://docs.npmjs.com/files/package.json, так мы узнаем о требовании к версии Node.js. А требования к версии MongoDB можно будет сообщить отдельно в письме.

Пожелания к использованию модулей:

Их использование не обязательно, можно использовать другие, аналогичные модули. Если вам не жалко времени, можно вообще всё самому сделать без использования модулей. Например, для того чтобы писать и запускать тесты не обязательно использовать gulp и chai, достаточно нативного assert и правильно оформленного scripts.test в package.json.

##Примечание Задание на frontend тут есть потому, что каждый backend-разработчик должен иметь хорошее представление о том как можно использовать свою работу и уметь работать с backend-ом хотя бы на простейшем уровне. Структуру хранения комментариев в БД можно выбрать любую, но нужно будет обосновать своё решение, указать на плюсы и минусы вашего решения.

Алгоритм подсчёта 4 и 5 метдов backend-а так же можно реализовать разными способами. При обсуждении вашего решения хотелось бы узнать чем вы руководствовались выбирая механизм/алгоритм рассчёта.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment