https://drone-cafe-management.herokuapp.com
- Сервер реализован на Node.js с использованием express.js
- Взаимодействие клиента и сервера в реальном времени реализовоно с использованием socket.io
- Интерфейс системы построен на фреймворке AngularJS с использованием модулей:
- angular-local-storage - для работы cookie
- angular-resource - для работы с REST API
- angular-ui-router - для работы с роутами
- Для хранения данных использована БД MongoDB с библиотекой Mongoose
- В качестве CSS фреймворка использован Materialyze
app
|--- AuthForm
|--- AuthForm.html
|--- AuthFormCtrl.js
|--- HeaderComponent
|--- HeaderComponent.html
|--- HeaderComponent.js
|--- Kitchen
|--- Kitchen.html
|--- KitchenCtrl.js
|--- Libs
|--- Order
|--- Order.html
|--- OrderCtrl.js
|--- Services
|--- SocketService.js
|--- StorageService.js
|--- TimeParserService.js
|--- UserService.js
|--- app.js
|--- app.scss
|--- index.html
|--- node_modules
server
|--- models
|--- DishModel.js
|--- OrderModel.js
|--- UserModel.js
|--- index.js
|--- api.js
|--- server.js
|--- socket.js
tests
- интерфейс пользователя,
- интерфейс повара.
Содержит 2 роута:
- getAuth – страница авторизации,
- order – страница работы с заказами.
При первом запуске приложения новым пользователем, происходит проверка с помощью метода getUser() сервиса StorageService содержится ли в cookie объект пользователя или нет. Если возращен объект происходит переход на роут order, иначе getAuth.
После заполнения формы пользователем, данные формы POST запросом направляются на адрес /users. Поля формы валидируются.
На сервере адрес /users обрабатывается следующим образом:
Происходит запрос в БД по полю email. Если пользователь с данным email зарегистрирован, возвращается ответ с телом содержащим данные пользователя, иначе создается и возвращается новый пользователь и ему на баланс добавляется 100 кредитов.
Данные пользователя записываются в cookie использую метод сервиса StorageService setUser().
Пополнение баланса реализовано посредством события Socket ‘addCredit’. Нажатие на кнопку Add Credit инициирует данное событие с передачей аргумента: id пользователя.
Для работы с Socket реализован сервис SocketService. Его методы возвращают Promise который должен разрешиться объектом содержащим запрошенные данные.
Нажатие на копку Add Dish инициирует событие Socket ‘getDishes’. Ответом сервера будет массив объектов с данными блюд. Список блюд в интерфейсе отображается в модальном окне.
Создается в интерфейсе пользователя. Нажатие на кнопку ADD в карточке блюда инициирует событие Socket ‘addDishToOrder’ и 'subCredit'.
-
‘addDishToOrder’ обрабатывается на сервере следующим образом:
- создается заказ по модели ‘OrderModel’ со статусом “ordered” и сохраняется в БД,
- инициируются события Socket: ‘addDishToOrder’ – в интерфейсе пользователя добавляет заказ в массив order ‘orderStatus’ - в интерфейсе пользователя добавляет заказ меняет статус заказа
-
'subCredit' – списывает с баланса стоимость блюда.
Обработчик события ‘orderStatus' меняет статус заказов, удаляет заказ из интерфейса если статус заказа меняется на ‘deleted’, инициирует ‘addCredit’, если статус заказа меняется на 'rejection'.
https://drone-cafe-management.herokuapp.com/#!/kitchen
После загрузки страницы инициируется событие ‘getOrders’, ответ содержит список заказов. Заказы сортируются по статусам и отображаются в интерфейсе.
Нажатия на кнопки Start и Complete в соответствующих разделах инициируют событие ‘orderStatus’. В ответе приходит объект заказа с новым статусом и заказ либо удаляется из первого раздела и создается во втором по другому шаблону, либо удаляется из интерфейса.
‘orderStatus’ обрабатывается на сервере следующим образом:
- если заказ имеет статус 'cooking', то заказ переходит на доставку в модуль ‘drone’ и присваивается новый статус. После разрешения Promise доставки запускается автоудаление с таймаутом и инициируется событие ‘orderStatus’.
- иначе присваивается новый статус и инициируется событие ‘orderStatus’
Файлы со сценариями тестов располагаются в папке tests. Реализованы тесты сервера (REST API и Socket) с использованием библиотек:
- Mocha
- Chai
- Supertest
И тесты интерфейса с использованием Protractor.