Восстановление бинокулярного зрения в VR часть 3

 Бэкенд

Для удобства работы с приложением, ведением электронной истории болезни и управлением планом лечение был написан бэкенд на python с использованием FASTAPI  который удовлетворяет следующим требованиям:

Необходимо разработать api позволяющие вести карту больного со следующим функционалом:

  1. Карточка больного со следующим функционалом
    1. ФИО
    2. Возраст
    3. Текущий диагноз
    4. Тип бинокулярного зрения (отставите/присутствие/ведущий глаз)
    5. ФИО лечащего врача
    6. История болезни (можно добавлять, нельзя удалять и редактировать)
    7. Показ последней записи в истории болезни
    8. Пагинация истории болезни
    9. Установка типа упражнения и их количества за тренировку (кластический синаптофор, сведение глаз на объект и т.д.)
    10. Прогресс после тренировки
  2. Функционал врача
    1. Регистрация (ФИО логин пароль)
    2. Вход
    3. Регистрация пациента (дается логин и пароль простотой) он автоматически прикрепляется к этому врачу
    4. Поиск пациента
    5. Доступ к карточке больного
    6. Список с пагинацией Всех своих пациентов
    7. Список всех пациентов (может и не стоит этого добавлять)
    8. Смена пароля
    9. Добавление записи в историю болезни больного с автоматическим изменением текущего врача
  3. Функционал клиента (пациента)
    1. Вход
    2. Получение списка текущих упражнений
    3. Отправка прогресса
    4. Получение статистики после тренировки

Используемые технологии:

  1. FastAPI
  2. PostgresSQL
  3. SQLAlchemy
  4. Docker-compose

   Описание БД

В качестве БД был выбран PostgresSQL поскольку сервис не является высоко нагруженным и она бесплатна. Все взаимодействие с БД происходит через ORM, при этом для доступа к объектам родительским или же дочерним в ORM происходит через код генерацию подзапроса, а не через ленивые вычисление. Таким образом в модели ORM связанные данные в таблице хранятся не в виде данных, а в виде подзапроса, это позволяет снизить нагрузку и сделать пагинацию дочерних сущностей. Со структурой базы данных представлена на рисунке 1.

Cтруктура базы данных рисунок 1.

Благодаря DTO основанного на pydantic бизнес логика абстрагирована от конкретной реализации базы данных. 

Бизнес логика.

Существует две точки входа для пользователей, одна для врачей, вторая для пациентов. Авторизация основана на OAuth2 доступ к функционалу разграничен скопами (хранящимися в jwt), время жизни токена 12ч, после чего его следует обновить. На рисунке 2 представлен весь функционал приложения.

Рисунок 2. Функционал приложение

Все приложение подготовлено для быстрого развертывания через докер контейнер, а также имеется быстрая настройка конфигураций через конфиг файл.

В дальнейшем, бэкенд часть будет переписана на go, а синхронизация со клиентной частью (пациентом) будет основана на сокетах