Это API-сервер на Python и FastAPI, который служит проводником к базе данных PostgreSQL с данными о наноматериалах. Проект предоставляет эндпоинты для получения этих данных.
Проект имеет модульную структуру, где логика разделена по доменам данных. Это позволяет легко добавлять новые источники и эндпоинты.
chemx-backend/
│
├── .github/ # Конфигурация для GitHub
│ └── workflows/
│ └── run-tests.yml # Workflow для автоматического запуска тестов (CI)
├── .venv/ # Папка с виртуальным окружением Python
│
├── app/ # Корневая папка приложения FastAPI
│ ├── __init__.py # Инициализатор пакета 'app'
│ │
│ ├── domains/ # Модули, сгруппированные по доменам данных
│ │ ├── __init__.py
│ │ │
│ │ ├── common/ # Общие, переиспользуемые компоненты
│ │ │ ├── __init__.py
│ │ │ ├── schemas.py # Общие Pydantic-схемы
│ │ │ └── utils.py # Общие вспомогательные функции
│ │ │
│ │ ├── cytotox/ # Модуль для домена 'cytotox'
│ │ │ ├── __init__.py
│ │ │ ├── endpoints.py # API-контроллеры
│ │ │ ├── models.py # Модели SQLAlchemy ORM
│ │ │ ├── router.py # Регистрация маршрутов
│ │ │ ├── schemas.py # Специфичные Pydantic-схемы
│ │ │ └── service.py # Бизнес-логика
│ │ │
│ │ ├── nanomag/
│ │ │ └── ... (аналогичная структура)
│ │ │
│ │ ├── nanozymes/
│ │ │ └── ... (аналогичная структура)
│ │ │
│ │ ├── seltox/
│ │ │ └── ... (аналогичная структура)
│ │ │
│ │ └── synergy/
│ │ └── ... (аналогичная структура)
| ├── tests/ x# Папка с тестами которые потом будут в github actions
│ ├── └── test_domain_apis.py
│ │
│ ├── database.py # Настройка подключения к базе данных
│ └── main.py # Главная точка входа в приложение
│
│
├── config.py # Глобальная конфигурация проекта
├── .gitignore # Файл для исключения файлов из системы контроля версий Git
├── README.md # Основная документация по проекту
└── requirements.txt # Список Python-зависимостей проекта
Все эндпоинты сгруппированы по доменам. Вот примеры для домена cytotox
:
-
GET /api/v1/cytotox/data/all
- Получает все данные из витрины
cytotox
. - Параметры:
file_format
(json
илиcsv
),nanoparticle
(для фильтрации).
- Получает все данные из витрины
-
GET /api/v1/cytotox/analytics/column-stats
- Получает посчитанную статистику по колонкам.
- Параметр:
file_format
(json
илиcsv
).
-
GET /api/v1/cytotox/analytics/row-stats
- Получает посчитанную статистику по строкам.
- Параметр:
file_format
(json
илиcsv
).
-
GET /api/v1/cytotox/analytics/top-categories
- Получает статистику по топовым категориям.
- Параметр:
file_format
(json
илиcsv
).
Аналогичные эндпоинты существуют и для других доменов (nanomag
, nanozymes
и т.д.).
После запуска сервера полный список всех эндпоинтов и их параметров доступен по адресу
http://127.0.0.1:8000/docs
.
-
Скачать репозиторий:
git clone https://github.com/ai-chem/ChemX-backend.git cd ChemX-backend
-
Установить все нужные библиотеки: (Рекомендуется делать это в виртуальном окружении)
pip install -r requirements.txt
-
Настроить подключение к базе данных: Создайте в корне проекта файл с именем
.env
. Укажите свои данные для подключения к локальной базе данных.# .env DB_HOST=localhost DB_PORT=5432 DB_NAME=ChemX DB_USER=postgres DB_PASSWORD=ваш_пароль
-
Запустите сервер:
uvicorn app.main:app --reload
Сервер будет доступен по адресу
http://127.0.0.1:8000
.
Для проверки работоспособности проекта используются тесты, написанные с помощью pytest
.
Чтобы запустить их, выполните команду в корневой папке проекта:
pytest
В этом репозитории настроен GitHub Actions. При попытке добавить новый код в основную ветку, он автоматически запускает все тесты для проверки, что ничего не сломалось.
Для работы этой системы в настройках репозитория на GitHub (Settings -> Secrets
) нужно указать данные для подключения к удаленной тестовой базе данных:
DB_HOST
DB_PORT
DB_NAME
DB_USER
DB_PASSWORD