/shri-2018-task-3

Задание на JS

Primary LanguageJavaScript

Установка зависимостей

Установка для серверной части

npm install

Установка для клиентской части

cd client && npm install

Запуск

Запуск приложения.(Одновременный запуск сервера и клиентской части)

npm run dev-app

Запуск только сервера:

npm run server

Запуск только клиента:

npm run client

Live версия приложения

Яндекс Переговорки Можно потестить онлайн. Например ту же верстку можно потестить на этой онлайн версии.

Используется сервис heroku для размещения приложения с целью его демонстрации онлайн. Heroku прост и удобен. К томуже предоставляет возможность размещать приложения на своих серверах бесплатно, но с ограничением - если приложение не используется какое-то время, то сервер "засыпает". Поэтому при первой загрузке может грузиться немного дольше обычного, так как мы как бы "будим" сервер.

О используемых технологиях

Серверная часть приложения строится c использованием следующих библиотек:

  • Express
  • Sequelize
  • GraphQL

Файлы серверной части приложения находятся в корневой директории и разрабатываются независимо от клиетского фнкционала. По сравнению с резульатом 1 задания были внесены некоторые изменения. Например были добавлены функции getEventsByDateRange, изменен updateEventData.

  • getEventsByDateRange Получаем данные о событиях с сервера на конкретный день, и работаем с ними.
  • updateEventData Изменяем событие на клиенте и отправлем изменения на сервер только после нажатия на кнопку "Сохранить". Обновляем данные события полностью.

Клиентская часть приложения построена на:

  • Redux
  • React

React в сочетании с Redux я использую для разделения отвественности между частями программы. Для реакта применяю понятия "умных" и "глупых" компонентов, что еще больше позволяет разделить отвественность между частями приложения. Так мы разделем логику и представление приложения. Этот поход позволит в конкретный момент времени заниматься реализацией конретной функциональности. Клиентская часть приложения находится в директории client

Также при построеннии клиентской части приложения использовались библиотеки:

  • moment.js Библиотека moment.js предоставляет широкие возможности по работе с датами и временем. Существующие локальные пакеты библиотеки для разных языков еще больше расширяют возможности библиотеке. Например библиотека помогает отображать даты со склонением, предоставляет удобные инструменты по манипуляции с датами. Яндекс переговорки - приложение, в котором понятия времени и даты одни из основных.

Сторонние React компоненты:

  • react-datepicker
    • react-datepicker использую в реализации компонента календаря в приложения.
  • react-autosuggest
    • react-autosuggest использую в реализации компонента с выбором участника встречи.

react-datepicker и react-autosuggest - временное решение. Лучше написать свой, но в данной ситуации с целью экономии времени было решено использовать готовые реализации.

Пару слов о getRecomendation

Функция getRecomendation client/src/scripts/getRecomedation.js реализована под структуру данных, которая использовалась для хранения информации о событиях в виде объекта в котором события отсортированны по комнатам. Ее функционал разделен на две логические части. Сначала работает, первая и возвращает доступные переговорки, ничего не перемещая, если же она ничего не возвращает, то выполняется вторая логическая часть программы, которая уже может перемещать переговорки, если возможно и нужно.

P.s.

Буду очень признателен, если получу обратную связь и советы, ссылки на баги. В общем любую обрутную связь. :D Спасибо команде Яндекса за интересное задание!