Установка зависимостей
Установка для серверной части
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 Спасибо команде Яндекса за интересное задание!