Этот проект представляет собой веб-приложение, разработанное для управления и просмотра результатов медицинских исследований, проводимых в лабораториях при исследовательском центре. Ниже приведены основные шаги для начала работы с этим приложением.
Проект "Сервис для работы с результатами исследований" предназначен для управления результатами медицинских исследований. В данном проекте используется Django в качестве основной платформы для разработки веб-приложения.
Проект Lab_Data_Hub имеет следующую структуру:
-
.github/workflows: Эта директория содержит файлы для настройки непрерывной интеграции (CI) с использованием GitHub Actions. CI workflow автоматически запускает тесты при каждом пуше в ветку
main. -
backend: Эта директория содержит основной код проекта и делится на несколько поддиректорий:
-
api: Здесь находятся файлы, связанные с API проекта, включая URLs, модели, представления (views) и сериализаторы (serializers). Эта часть содержит всю бизнес-логику бекенда.
-
lab_data_project: В этой директории находятся настройки проекта, включая настройки
Djangoи другие конфигурационные файлы. -
tests: Здесь находятся тесты проекта, которые позволяют проверить работоспособность приложения и выявить возможные ошибки и проблемы.
-
Dockerfile: Этот файл содержит настройки для создания контейнера
Dockerдля бекенда.
-
-
gateway: Эта директория содержит файлы для создания образа
Dockerи настройки веб-сервераNginx, включая файлnginx.conf. -
docker-compose.yml: Этот файл используется для запуска Docker Compose и объединяет все необходимые контейнеры для разворачивания проекта.
Тесты проекта находятся в директории tests и разделены на следующие категории:
-
URLs тесты:
- Проверяют доступность эндпоинтов.
- Проверяют доступность эндпоинтов по идентификатору (ID).
- Тестируют создание записей через эндпоинты.
- Проверяют удаление записей через эндпоинты.
-
Модели тесты:
- Проверяют корректное создание записей для каждой модели в проекте.
-
Сериализаторы тесты:
- Проверяют, что сериализаторы возвращают правильные значения при сериализации данных.
Для тестирования проекта используется автоматизация с использованием GitHub Actions. При каждом push в ветку main, запускаются автоматические тесты для следующих категорий:
- URLs тесты.
- Модели тесты.
- Сериализаторы тесты.
Эти тесты обеспечивают правильное функционирование приложения и помогают выявить ошибки и проблемы.
Примечание: Для успешного запуска тестов локально у вас должна быть настроена и запущена система управления базами данных PostgreSQL. Убедитесь, что PostgreSQL установлен и сконфигурирован на вашем компьютере.
Для запуска тестов локально, выполните следующие шаги:
-
Убедитесь, что в вашем виртуальном окружении установлены необходимые зависимости, перечисленные в файле
requirements.txt. -
Запустите тесты с помощью команды:
pytest
Файл workflow находится в директории:
Lab_Data_Hub/.github/workflows/main.yml
В этом проекте используется автоматизация с использованием GitHub Actions для запуска тестов (flake8, isort, pytest) при каждом пуше в ветку main.
В этом проекте используются Docker контейнеры для развертывания бекенда (Django), веб-сервера (Nginx) и базы данных PostgreSQL с целью обеспечения изолированного и масштабируемого окружения.
Для бекенда используется контейнер, основанный на образе Python 3.10-slim. Этот контейнер устанавливает необходимые зависимости из файла requirements.txt и запускает приложение Django с помощью Gunicorn на порту 8000.
Для веб-сервера Nginx также используется Docker контейнер. Он копирует файл конфигурации nginx.conf, который используется для настройки Nginx, в /etc/nginx/templates/default.conf.template.
База данных PostgreSQL также развертывается в отдельном Docker контейнере. Он использует официальный образ PostgreSQL 14 и настраивает переменные окружения, такие как POSTGRES_USER, POSTGRES_PASSWORD, и POSTGRES_DB.
Контейнеры для бекенда, Nginx и PostgreSQL связаны друг с другом через сеть Docker, чтобы обеспечить взаимодействие между бекендом, веб-сервером и базой данных. Вы можете использовать Docker Compose для управления этой сетью и настройки контейнеров.
Примечание: Все примеры указаны для Mac/Linux.
-
Установите Docker и Docker Compose
-
Склонируйте репозиторий: Склонируйте репозиторий с проектом на свой компьютер:
git clone git@github.com:1emd/Lab_Data_Hub.git -
Создайте файл
.envи заполните его своими данными.:Пример: POSTGRES_USER=django_user POSTGRES_PASSWORD=mysecretpassword POSTGRES_DB=django DB_HOST=db DB_PORT=5432 -
Запустите контейнеры: В корневой папке проекта(Lab_Data_Hub) выполните следующую команду, чтобы запустить контейнеры с использованием Docker Compose:
docker compose up
Это создаст и запустит контейнеры для вашего проекта.
-
Примените миграции: Выполните миграции для создания таблиц в базе данных:
- docker compose -f docker-compose.yml exec backend python manage.py makemigrations - docker compose -f docker-compose.yml exec backend python manage.py migrate -
Соберите статические файлы бэкенда:
docker-compose -f docker-compose.yml exec backend cp -r /app/collected_static/. /backend_static/static/ -
Создайте суперюзера:
docker compose -f docker-compose.yml exec backend python manage.py createsuperuser
Для облегчения управления данными в проекте предусмотрен администраторский интерфейс. Для доступа, необходимо создать суперпользователя и перейти по следующей ссылке:
http://127.0.0.1:8000/admin/
Это позволит управлять данными и ресурсами проекта через удобный веб-интерфейс.
Для документации и тестирования API в проекте доступен Swagger UI. После успешного запуска вашего проекта, вы можете открыть Swagger UI в веб-браузере, перейдя по следующему URL:
http://127.0.0.1:8000/api/swagger/
Аутентификация пользователей управляется библиотекой Djoser.
Примечание: Для полноценной работы с API необходимо создать пользователя (или воспользоваться суперюзером) и получить аутентификационный токен.
- Создание пользователя.
Метод: POST
http://127.0.0.1:8000/api/users/
Тело запроса (JSON):
{
"email": "example@example.com",
"username": "example_user",
"password": "example_password"
}- Введите email и пароль для получения токена.
Метод: POST
http://127.0.0.1:8000/api/auth/token/login/
Тело запроса (JSON):
{
"email": "example@example.com",
"password": "example_password"
}Пример ответа (JSON):
{
"auth_token": "35b4af1ca10a8ff3d239e40188ea9fdc617dcf19"
}Данный токен необходим для совершения POST, PUT, PATCH, DELETE запросов на другие эндпоинты.
Пример использования в Postman:
- В
Postmanвыберите вкладкуHeaders. - В поле
KeyвведитеAuthorization. - В поле
ValueвведитеToken <token>, где<token>замените на фактический аутентификационный токен.
- Доступные методы: GET (получение списка), GET (поиск по ID), POST (создание), PUT (обновление), PATCH (частичное обновление), DELETE (удаление)
Лаборатории (Labs):
- URL:
http://127.0.0.1:8000/api/labs/ - Описание: Здесь вы можете добавлять и просматривать информацию о лабораториях, в которых проводятся исследования.
Тесты (Tests):
- URL:
http://127.0.0.1:8000/api/tests/ - Описание: Этот эндпоинт используется для создания записей о медицинских тестах, включая даты начала и завершения.
Показатели (Indicators):
- URL:
http://127.0.0.1:8000/api/indicators/ - Описание: Здесь можно добавлять информацию о показателях, которые измеряются в ходе медицинских исследований.
Метрики (Metrics):
- URL:
http://127.0.0.1:8000/api/metrics/ - Описание: Здесь вы можете добавлять и просматривать информацию о метриках, связанных с исследованиями.
Показатель метрики (Indicator Metric):
- URL:
http://127.0.0.1:8000/api/indicator-metrics/ - Описание: Здесь устанавливаются связи между показателями и метриками.
Количественные значения (Scores):
- URL:
http://127.0.0.1:8000/api/scores/ - Описание: Этот эндпоинт предназначен для ввода количественных данных, полученных в ходе медицинских исследований.
Справки (References):
- URL:
http://127.0.0.1:8000/api/references/ - Описание: Здесь устанавливаются справочные значения, которые используются для сравнения с полученными данными.
Результаты медицинских исследований (Test Results):
- URL:
http://127.0.0.1:8000/api/test-results/ - Описание: После заполнения информации в вышеперечисленных эндпоинтах, в этом эндпоинте будет доступен результат медицинских исследований. Вы можете также выполнять фильтрацию по ID лаборатории.
Для получения результатов медицинских исследований (/test-results/) необходимо заполнить информацию во всех указанных эндпоинтах. Это позволит вам проводить комплексные медицинские анализы и получать точные результаты.
Вы также можете выполнять поиск по ID для каждого эндпоинта, используя URL вида: /api/<endpoint_name>/<item_id>, где <endpoint_name> - имя конкретного эндпоинта, а <item_id> - идентификатор объекта.
Пример: /api/labs/lab_id, где lab_id - это идентификатор конкретной лаборатории.
В /api/test-results/ доступна возможность фильтрации по ID лабораторий (lab_id). Пример: /api/test-results/?lab_id=<lab_id>, где <lab_id> - идентификатор конкретной лаборатории.
Примечание : Даты и времена указываются в формате ISO 8601.
Пример даты и времени, соответствующий этому формату: 2023-09-30T15:30:00Z - 30 сентября 2023 года, 15:30 по времени UTC.
- Создание лаборатории:
/api/labs/
{
"name": "Лаборатория 1",
"is_active": "True",
"created_at": "2023-09-30T15:30:00Z",
"updated_at": "2023-09-30T15:30:00Z"
}- Создание тестов:
/api/tests/
{
"started_at": "2023-09-30T15:31:00Z",
"completed_at": "2023-09-30T15:33:00Z",
"comment": "Комментарий к тесту",
"lab_id": "11ecc4f7-cf3a-4179-b804-b82f3d2c32b6",
"is_active": "True",
"created_at": "2023-09-30T15:31:00Z",
"updated_at": "2023-09-30T15:35:00Z"
}- Создание показателей:
/api/indicators/
{
"name": "Показатель 1",
"description": "Описание 1",
"is_active": "True",
"created_at": "2023-09-30T15:32:00Z",
"updated_at": "2023-09-30T15:36:00Z"
}- Создание метрики:
/api/metrics/
{
"name": "Метрика 1",
"description": "Описание метрики 1",
"unit": "Единица измерения 1",
"is_active": "True",
"created_at": "2023-09-30T15:33:00Z",
"updated_at": "2023-09-30T15:37:00Z"
}- Создание показателя метрики:
/indicator-metrics/
{
"indicator_id": "bdda7eac-92be-45b7-b472-126be51379b8",
"metric_id": "03774bc2-a979-4607-8eeb-d7bd79298632",
"is_active": "True",
"created_at": "2023-09-30T15:34:00Z",
"updated_at": "2023-09-30T15:38:00Z"
}- Создание количественных значений:
/api/scores/
{
"score": 20,
"test_id": "ca249c3c-ddea-450c-9ab3-4cbeffe72069",
"indicator_metric_id": "1e657619-2dd9-43c9-94a5-7497fdff40ae",
"is_active": "True",
"created_at": "2023-09-30T15:36:00Z",
"updated_at": "2023-09-30T15:39:00Z"
}- Создание справки:
/api/references/
{
"min_score": 10,
"max_score": 30,
"indicator_metric_id": "1e657619-2dd9-43c9-94a5-7497fdff40ae",
"is_active": "True",
"created_at": "2023-09-30T15:37:00Z",
"updated_at": "2023-09-30T15:40:00Z"
}После заполнения всех необходимых эндпоинтов (/labs/, /tests/, /indicators/, /metrics/, /indicator-metrics/, /scores/, /references/), вы можете получить результат медицинских исследований, обратившись к эндпоинту /test-results/.
Этот эндпоинт предоставляет информацию о результатах медицинских исследований на основе данных, которые были предварительно внесены в систему. Результаты будут доступны для просмотра и анализа после того, как все необходимые данные будут добавлены в проект.
Примечание:
- Результаты исследований доступны только для зарегистрированных пользователей.
- Возможность отправки
POSTзапроов на данном эндпоинте отсутствует.
Пример получения результатов исследований: /test-results/
[
{
"id": "ca249c3c-ddea-450c-9ab3-4cbeffe72069",
"lab_id": "11ecc4f7-cf3a-4179-b804-b82f3d2c32b6",
"duration_seconds": 120,
"results": [
{
"id": "0c53cd5a-ce74-4df1-ac2a-fa3a3580b2e6",
"score": 20.0,
"indicator_name": "Показатель 1",
"metric_name": "Метрика 1",
"metric_unit": "Единица измерения 1",
"is_within_normal_range": true
}
]
}
]Для получения нового результата необходимо создать новый тест /tests/ и заполнить данные( /indicators/, /metrics/, /indicator-metrics/, /scores/,/references/).
Для добавления новых записей в результаты текущего теста необходимо заполнить новые данные (/indicators/, /metrics/, /indicator-metrics/, /references/) и в /scores/ указать текущий test id и новый indicator metrics id.
- Python 3.10
- Django 4.2
- Django REST Framework 3.14.0
- PostgreSQL 14.0
- Nginx 1.22.1
- Gunicorn 21.2.0
- Docker
- Docker compose