Состав и структура программного комплекса
Как уже упоминалось в конце первого параграфа текущей главы, веб-комплекс состоит из трех компонентов: интерфейс приложения, серверная часть и база данных. Описание состава и структуры веб-комплекса стоит начать с описания реализации базы данных.
Базы данных.Так как MongoDBимеет подход NoSQL,то таблицы базы данных будут называться коллекциями, а строки таблиц – документами. Реализация коллекций также происходит на серверной части веб-комплекса. База данныхсостоит из трех коллекций:
1. User – коллекция пользователей. Структура документа имеет следующие обязательные поля:
a. email – почта, уникальное значение
b. password – хэш пароля
c. address – строка адреса
d. latLng–географические координаты адреса (широта и долгота)
e. login – ФИО
f. phone – телефон
g. role – роль, перечисляемый тип из трех значений: пациент, врач, администратор. Дефолтное значение «пациент», выставляется при регистрации
2. Worker – коллекция рабочих графиков врачей
a. id_user –идентификатор пользователя «врач»
b. estimated_time – затрачиваемое время на обход пациентов
c. patients – массив документов коллекции record (подробнее в описании коллекции). Порядок документов массива задает путь обхода пациентов.
d. start–время начала рабочего дня
e. end –время конца рабочего дня
3. Record – коллекция записей пациентов
a. id_user – идентификатор документа коллекции user
b. id_worker – идентификатор документа коллекцииworker
c. time_create – время создания записи
d. time_target – целевое время посещения пациента врачом. Применяется для планирования обхода. Назначается после расчета или перерасчета пути алгоритмом
e. comment – примечание, краткое описание причины вызова врача
Серверная сторона.Серверная сторона программного средствапредставляет независимый от интерфейса веб-сервис, использующий архитектуру REST. Взаимодействие с ним происходит по HTTP-протоколу (с помощью команд GET, POST, PUT, DELETE), а обмен данными осуществляется в формате JSON. СтруктураAPIвеб-сервиса представлена в виде схемы на рисунке 2.9
Рисунок 2.9. API серверной части
Запросы производные от «auth» к API, не проходят проверку сессии по токену JWT. Остальные запросы – проходят проверку сессии.Токен может быть получен только после авторизации (запрос /auth/authenticate). В случае успешной проверки вызывается соответствующий запросу метод. Если токен неверный или отсутствует в заголовке запроса, то приходит ошибка «401 Authenticationerror». Данная ошибка может быть в двух случаях: когда токен неверный/отсутствует или закончилась сессия пользователя. Для последнего случая используется POST запрос /auth/check, который проверяет сессию и продлевает ее, если она не закрыта, а в ответе возвращает модель пользователя. Это решение полезно для SPAинтерфейса веб-сервиса. Перед отображением, компонент интерфейса посылает checkзапрос на сервер, после чего, на основании полученного ответа показывает соответствующий пользователю контент.
Запросык API вызывают соответствующие методы контроллера, которые взаимодействуют с базой данных и выполняют определенные действия. Запросы,проходящие проверку сессии, разделены на четыре вида: для врачей, пациентов, администратора или любой роли. Проверка ролей пользователя осуществляется аналогичным образом, как и проверка авторизации. При поступлении запроса, перед вызовом метода контроллера, происходит соответствующая проверка доступа, и в случае ее успеха вызывается уже самметод. Описание методов обрабатывающих запросы, как представлено на рисунке 2.9 делятся на 4 группы:worker, user, record, auth. В таблице 2.2 представлено подробное описание каждого метода.
Таблица 2.2
Описание методов обработки запросов
Запрос | Метод | Действие |
GET /worker/ | getWorker | Возвращает распределение рабочего графика врача на текущую неделю. Формат данных: массив моделей worker |
GET /worker/ | addWorker | Добавляет рабочий график на заданный пользователем промежуток из двух дат (время и дата начала и конца) |
Продолжение таблицы2.2
Запрос | Метод | Действие |
PUT /worker/ | changeWorker | Изменяет временной промежуток рабочего графика |
DELETE /worker | deleteWorker | Удаляет рабочий график |
GET /worker/all | getDoctors | Возвращает массив работающих врачей на текущий день, у которых занятость (estimated_time) не превышает конец минус начало рабочего графика |
GET /worker/all/:date | infoWorkers | Возвращает информацию о рабочих графиках врачей и их выполненных заявках, начиная с указанной даты в параметре запроса date |
GET /record/all | getRecords | Возвращает список записей пациентов на текущий (сегодняшний) рабочий график врача |
GET /record | getRecord | Возвращает текущую заявку пациента |
POST /record | addRecord | Регистрирует заявку пациента |
PUT /record | changeRecor | Изменяет данные текущей заявки |
DELETE /record | delRecord | Удаляет заявку |
GET /user | getUser | Возвращает модель текущего авторизированного пользователя |
PUT /user | changeUser | Изменяет данные пользователя |
GET /user/allUsers | getUsers | Возвращает список пользователей |
PUT /user/setRole | setRole | Изменяет роль пользователя |
DELETE /user | delUser | Удаляет пользователя |
POST auth/register | register | Регистрирует нового пользователя |
POST /auth | authenticate | Открывает сессию пользователя и возвращает JWT токен |
POST /auth/check | check | Возвращает токен JWT если сессия пользователя открыта |
Стоит отметить, что при создании, удалении или изменении (в случае смены врача) заявки, запускается алгоритм оптимизации маршрута, так как соответственно происходит изменение у врачасписка пациентов.
Интерфейс.Работу с запросами серверной стороны непосредственно берет на себя интерфейс программного средства и предоставляет пользователю следующие возможности:
1. Авторизация пользователей:
· Форма входа:
§ Адрес электронной почты
§ Пароль
· Форма регистрации:
§ Адрес электронной почты (уникальный)
§ Пароль
§ Подтверждение пароля
§ ФИО
§ Дата рождения
§ Адрес проживания
§ Номер полиса (уникальный)
2. Разделы пользователя - пациент:
· Форма для создания либо отмены заявки
§ Поле с возможность выбора работающего врача
§ Поле комментария
· Редактирование профиля
3. Разделы пользователя - врач:
· Календарь - планировщик рабочего времени
§ Добавление, редактирование и удаление распределения времени на текущий и последующие дни
· Сводка с панелями:
§ Таблица заявок в порядке оптимального маршрута
§ Текущий пункт назначения
§ Статистика по выполненным и ожидающим заявкам.
· Отчеты
· Редактирование профиля
4. Разделы пользователя – администратор:
· Сбор общей статистики врачей и их пациентов:
§ Календарь с распределением рабочего времени каждого врача и количество пациентов в течение дня
· Управление учетными записями пользователей:
§ Изменение ролей пользователей
§ Удаление пользователей
· Редактирование профиля