Skip to content

Latest commit

 

History

39 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Руководство по проекту "Сервис для работы с результатами исследований"

Этот проект представляет собой веб-приложение, разработанное для управления и просмотра результатов медицинских исследований, проводимых в лабораториях при исследовательском центре. Ниже приведены основные шаги для начала работы с этим приложением.

Описание проекта

Проект "Сервис для работы с результатами исследований" предназначен для управления результатами медицинских исследований. В данном проекте используется Django в качестве основной платформы для разработки веб-приложения.

Структура проекта

Проект Lab_Data_Hub имеет следующую структуру:

  1. .github/workflows: Эта директория содержит файлы для настройки непрерывной интеграции (CI) с использованием GitHub Actions. CI workflow автоматически запускает тесты при каждом пуше в ветку main.

  2. backend: Эта директория содержит основной код проекта и делится на несколько поддиректорий:

    • api: Здесь находятся файлы, связанные с API проекта, включая URLs, модели, представления (views) и сериализаторы (serializers). Эта часть содержит всю бизнес-логику бекенда.

    • lab_data_project: В этой директории находятся настройки проекта, включая настройки Django и другие конфигурационные файлы.

    • tests: Здесь находятся тесты проекта, которые позволяют проверить работоспособность приложения и выявить возможные ошибки и проблемы.

    • Dockerfile: Этот файл содержит настройки для создания контейнера Docker для бекенда.

  3. gateway: Эта директория содержит файлы для создания образа Docker и настройки веб-сервера Nginx, включая файл nginx.conf.

  4. docker-compose.yml: Этот файл используется для запуска Docker Compose и объединяет все необходимые контейнеры для разворачивания проекта.

Тестирование проекта

Тесты проекта находятся в директории tests и разделены на следующие категории:

  1. URLs тесты:

    • Проверяют доступность эндпоинтов.
    • Проверяют доступность эндпоинтов по идентификатору (ID).
    • Тестируют создание записей через эндпоинты.
    • Проверяют удаление записей через эндпоинты.
  2. Модели тесты:

    • Проверяют корректное создание записей для каждой модели в проекте.
  3. Сериализаторы тесты:

    • Проверяют, что сериализаторы возвращают правильные значения при сериализации данных.

Запуск тестов

Для тестирования проекта используется автоматизация с использованием GitHub Actions. При каждом push в ветку main, запускаются автоматические тесты для следующих категорий:

  • URLs тесты.
  • Модели тесты.
  • Сериализаторы тесты.

Эти тесты обеспечивают правильное функционирование приложения и помогают выявить ошибки и проблемы.

Запуск тестов локально

Примечание: Для успешного запуска тестов локально у вас должна быть настроена и запущена система управления базами данных PostgreSQL. Убедитесь, что PostgreSQL установлен и сконфигурирован на вашем компьютере.

Для запуска тестов локально, выполните следующие шаги:

  1. Убедитесь, что в вашем виртуальном окружении установлены необходимые зависимости, перечисленные в файле requirements.txt.

  2. Запустите тесты с помощью команды:

pytest

Workflow(CI)

Файл workflow находится в директории:

Lab_Data_Hub/.github/workflows/main.yml

В этом проекте используется автоматизация с использованием GitHub Actions для запуска тестов (flake8, isort, pytest) при каждом пуше в ветку main.

Docker Контейнеры

В этом проекте используются Docker контейнеры для развертывания бекенда (Django), веб-сервера (Nginx) и базы данных PostgreSQL с целью обеспечения изолированного и масштабируемого окружения.

Docker Контейнер для бекенда

Для бекенда используется контейнер, основанный на образе Python 3.10-slim. Этот контейнер устанавливает необходимые зависимости из файла requirements.txt и запускает приложение Django с помощью Gunicorn на порту 8000.

Docker Контейнер для Nginx

Для веб-сервера Nginx также используется Docker контейнер. Он копирует файл конфигурации nginx.conf, который используется для настройки Nginx, в /etc/nginx/templates/default.conf.template.

Docker Контейнер для PostgreSQL

База данных PostgreSQL также развертывается в отдельном Docker контейнере. Он использует официальный образ PostgreSQL 14 и настраивает переменные окружения, такие как POSTGRES_USER, POSTGRES_PASSWORD, и POSTGRES_DB.

Взаимосвязь контейнеров

Контейнеры для бекенда, Nginx и PostgreSQL связаны друг с другом через сеть Docker, чтобы обеспечить взаимодействие между бекендом, веб-сервером и базой данных. Вы можете использовать Docker Compose для управления этой сетью и настройки контейнеров.

Установка и настройка

Примечание: Все примеры указаны для Mac/Linux.

  1. Установите Docker и Docker Compose

  2. Склонируйте репозиторий: Склонируйте репозиторий с проектом на свой компьютер:

    git clone git@github.com:1emd/Lab_Data_Hub.git
    
  3. Создайте файл .env и заполните его своими данными.:

    Пример:
    POSTGRES_USER=django_user
    POSTGRES_PASSWORD=mysecretpassword
    POSTGRES_DB=django
    DB_HOST=db
    DB_PORT=5432
    
  4. Запустите контейнеры: В корневой папке проекта(Lab_Data_Hub) выполните следующую команду, чтобы запустить контейнеры с использованием Docker Compose:

    docker compose up 
    

Это создаст и запустит контейнеры для вашего проекта.

  1. Примените миграции: Выполните миграции для создания таблиц в базе данных:

    - docker compose -f docker-compose.yml exec backend python manage.py makemigrations
    - docker compose -f docker-compose.yml exec backend python manage.py migrate      
    
  2. Соберите статические файлы бэкенда:

    docker-compose -f docker-compose.yml exec backend cp -r /app/collected_static/. /backend_static/static/
    
  3. Создайте суперюзера:

    docker compose -f docker-compose.yml exec backend python manage.py createsuperuser
    

Администраторский интерфейс

Для облегчения управления данными в проекте предусмотрен администраторский интерфейс. Для доступа, необходимо создать суперпользователя и перейти по следующей ссылке:

http://127.0.0.1:8000/admin/

Это позволит управлять данными и ресурсами проекта через удобный веб-интерфейс.

Swagger API

Для документации и тестирования API в проекте доступен Swagger UI. После успешного запуска вашего проекта, вы можете открыть Swagger UI в веб-браузере, перейдя по следующему URL:

http://127.0.0.1:8000/api/swagger/

Пример использования API

Авторизация пользователя

Аутентификация пользователей управляется библиотекой Djoser.

Примечание: Для полноценной работы с API необходимо создать пользователя (или воспользоваться суперюзером) и получить аутентификационный токен.

  1. Создание пользователя.

Метод: POST http://127.0.0.1:8000/api/users/

Тело запроса (JSON):

{
    "email": "example@example.com",
    "username": "example_user",
    "password": "example_password"
}
  1. Введите 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> замените на фактический аутентификационный токен.

Работа с основными эндпоинтами

URLS проекта:

  • Доступные методы: 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> - идентификатор конкретной лаборатории.

Примеры POST запросов:

Примечание : Даты и времена указываются в формате ISO 8601. Пример даты и времени, соответствующий этому формату: 2023-09-30T15:30:00Z - 30 сентября 2023 года, 15:30 по времени UTC.

  1. Создание лаборатории: /api/labs/
{
    "name": "Лаборатория 1",
    "is_active": "True",
    "created_at": "2023-09-30T15:30:00Z",
    "updated_at": "2023-09-30T15:30:00Z"
}
  1. Создание тестов: /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"
}
  1. Создание показателей: /api/indicators/
{
    "name": "Показатель 1",
    "description": "Описание 1",
    "is_active": "True",
    "created_at": "2023-09-30T15:32:00Z",
    "updated_at": "2023-09-30T15:36:00Z"
}
  1. Создание метрики: /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"
}
  1. Создание показателя метрики: /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"
}
  1. Создание количественных значений: /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"
}
  1. Создание справки: /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"
}

Результат исследований /test-results/:

После заполнения всех необходимых эндпоинтов (/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

Автор

Кирилл Хорошилов

About

Сервис для работы с результатами исследований

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages