.. orghandbookapi documentation master file, created by
sphinx-quickstart on Tue Oct 21 23:07:47 2025.
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.
orghandbookapi documentation
============================
.. toctree::
:maxdepth: 4
:caption: Содержание:
orghandbookapi
org-handbook-api
================
REST API справочника организаций
**Ссылки:**
- `Документация API `_
- `Исходный код `_
- `Лицензия `_
.. image:: https://raw.githubusercontent.com/alexeev-prog/org-handbook-api/refs/heads/main/docs/pallet-0.png
Org-Handbook-API - это асинхронный RESTful API для управления справочником организаций с расширенными возможностями поиска и геолокации.
Основные возможности:
- Полный CRUD для организаций, зданий и видов деятельности
- Древовидная структура видов деятельности с ограничением вложенности
- Геопространственный поиск организаций
- Аутентификация через статичный API-ключ
- Автоматическая документация Swagger/Redoc
Технологический стек:
+------------------+-----------------------------------+
| Компонент | Технологии |
+==================+===================================+
| Фреймворк | FastAPI, Pydantic, SQLAlchemy 2.0|
+------------------+-----------------------------------+
| База данных | PostgreSQL + SQLAlchemy Async |
+------------------+-----------------------------------+
| Миграции | Alembic |
+------------------+-----------------------------------+
| Контейнеризация | Docker, Docker Compose |
+------------------+-----------------------------------+
| CI/CD | GitHub Actions |
+------------------+-----------------------------------+
| Документация | Sphinx, Swagger UI |
+------------------+-----------------------------------+
| Code Quality | Ruff, Mypy, Pytest |
+------------------+-----------------------------------+
Быстрый старт
-------------
Предварительные требования:
- Docker & Docker Compose
- Git
Установка и запуск:
1. Клонирование репозитория
.. code-block:: bash
git clone https://github.com/alexeev-prog/org-handbook-api.git
cd org-handbook-api
2. Запуск приложения
.. code-block:: bash
docker-compose up --build -d
3. Проверка работоспособности
.. code-block:: bash
curl -H "X-API-Key: secret-static-api-key" http://localhost:8000/health
4. Документация API доступна по адресу: http://localhost:8000/docs
Модели данных
-------------
Организация (Organization)
.. code-block:: json
{
"id": 1,
"legal_name": "ООО Рога и Копыта",
"building_id": 1,
"building": {
"id": 1,
"address": "г. Москва, ул. Ленина 1",
"latitude": 55.7558,
"longitude": 37.6173
},
"phonenumbers": [
{"id": 1, "phone_number": "2-222-222"},
{"id": 2, "phone_number": "3-333-333"}
],
"activities": [
{"id": 1, "name": "Молочная продукция"},
{"id": 2, "name": "Мясная продукция"}
]
}
Здание (Building)
.. code-block:: json
{
"id": 1,
"address": "г. Москва, ул. Ленина 1, офис 3",
"latitude": 55.7558,
"longitude": 37.6173
}
Деятельность (Activity) - древовидная структура
.. code-block:: json
{
"id": 1,
"name": "Еда",
"parent_id": null,
"level": 0,
"children": [
{
"id": 2,
"name": "Мясная продукция",
"parent_id": 1,
"level": 1
}
]
}
API маршруты
------------
Основные CRUD операции
Организации
~~~~~~~~~~~
+----------+------------------------------------+----------------------------+
| Метод | Endpoint | Описание |
+==========+====================================+============================+
| GET | /api/v1/organizations/ | Список организаций |
+----------+------------------------------------+----------------------------+
| GET | /api/v1/organizations/{id} | Организация по ID |
+----------+------------------------------------+----------------------------+
| POST | /api/v1/organizations/ | Создание организации |
+----------+------------------------------------+----------------------------+
| PUT | /api/v1/organizations/{id} | Обновление организации |
+----------+------------------------------------+----------------------------+
| DELETE | /api/v1/organizations/{id} | Удаление организации |
+----------+------------------------------------+----------------------------+
Здания
~~~~~~
+----------+--------------------------------+------------------------+
| Метод | Endpoint | Описание |
+==========+================================+========================+
| GET | /api/v1/buildings/ | Список зданий |
+----------+--------------------------------+------------------------+
| GET | /api/v1/buildings/{id} | Здание по ID |
+----------+--------------------------------+------------------------+
| POST | /api/v1/buildings/ | Создание здания |
+----------+--------------------------------+------------------------+
| PUT | /api/v1/buildings/{id} | Обновление здания |
+----------+--------------------------------+------------------------+
| DELETE | /api/v1/buildings/{id} | Удаление здания |
+----------+--------------------------------+------------------------+
Виды деятельности
~~~~~~~~~~~~~~~~~
+----------+------------------------------------+--------------------------------+
| Метод | Endpoint | Описание |
+==========+====================================+================================+
| GET | /api/v1/activity/ | Список видов деятельности |
+----------+------------------------------------+--------------------------------+
| GET | /api/v1/activity/{id} | Вид деятельности по ID |
+----------+------------------------------------+--------------------------------+
| POST | /api/v1/activity/ | Создание вида деятельности |
+----------+------------------------------------+--------------------------------+
| PUT | /api/v1/activity/{id} | Обновление вида деятельности |
+----------+------------------------------------+--------------------------------+
| DELETE | /api/v1/activity/{id} | Удаление вида деятельности |
+----------+------------------------------------+--------------------------------+
| GET | /api/v1/activity/tree/{parent_id} | Дерево видов деятельности |
+----------+------------------------------------+--------------------------------+
Расширенный поиск организаций
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+----------+--------------------------------------------------+-----------------------------------------+
| Метод | Endpoint | Описание |
+==========+==================================================+=========================================+
| GET | /api/v1/organizations/building/{building_id} | Организации в указанном здании |
+----------+--------------------------------------------------+-----------------------------------------+
| GET | /api/v1/organizations/activity/{activity_id} | Организации по виду деятельности |
+----------+--------------------------------------------------+-----------------------------------------+
| GET | /api/v1/organizations/search/name | Поиск организаций по названию |
+----------+--------------------------------------------------+-----------------------------------------+
| GET | /api/v1/organizations/search/radius | Геопоиск организаций в радиусе |
+----------+--------------------------------------------------+-----------------------------------------+
| GET | /api/v1/organizations/search/area | Поиск в прямоугольной области |
+----------+--------------------------------------------------+-----------------------------------------+
Аутентификация
~~~~~~~~~~~~~~
Все запросы требуют заголовок API-ключа:
.. code-block:: http
X-API-Key: secret-static-api-key
Пример запроса:
.. code-block:: bash
curl -H "X-API-Key: secret-static-api-key" "http://localhost:8000/api/v1/organizations/search/name?name=Рога"
Разработка
----------
Локальная установка для разработки
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Установка зависимостей
.. code-block:: bash
pip install uv
uv sync
2. Настройка окружения
Создайте или отредактируйте конфигурационный файл ``orghandbookapi.toml``
3. Запуск миграций базы данных
.. code-block:: bash
alembic upgrade head
4. Запуск сервера для разработки
.. code-block:: bash
uvicorn orghandbookapi.app:app --reload --host 0.0.0.0 --port 8000
Тестирование и качество кода
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Запуск тестов:
.. code-block:: bash
pytest tests/ -v
Линтинг и форматирование:
.. code-block:: bash
ruff check .
ruff format .
Проверка типов:
.. code-block:: bash
mypy orghandbookapi
Лицензия и поддержка
--------------------
Данный проект лицензирован под **GNU GPL 3**. Для коммерческого использования или вопросов по сотрудничеству напишите на `alexeev.dev@mail.ru `_.
- `Документация `_
- `Сообщить об ошибке `_
- `Предложить улучшение `_
---
REST API справочника организаций
Copyright © 2025 Alexeev Bronislav.