Это REST API для справочника организаций, зданий и видов деятельности, реализованное в рамках тестового задания.
Приложение предоставляет API для получения информации об организациях, их местоположении и сферах деятельности. Оно построено на стеке FastAPI + SQLAlchemy + PostgreSQL и полностью упаковано в Docker для легкого развертывания.
- Backend: Python, FastAPI
- База данных: PostgreSQL
- ORM: SQLAlchemy
- Миграции: Alembic
- Валидация данных: Pydantic
- Контейнеризация: Docker, Docker Compose
- ASGI Сервер: Uvicorn
- Получение списка всех зданий.
- Получение информации об организации по её ID.
- Получение списка всех организаций в конкретном здании.
- Получение списка всех организаций по конкретному виду деятельности.
- Поиск организаций по частичному совпадению названия.
- Поиск организаций по виду деятельности, включая все дочерние виды (рекурсивно).
- Поиск организаций в заданном радиусе от географических координат.
Для запуска проекта вам понадобится установленный Docker и Docker Compose.
-
Клонируйте репозиторий:
git clone https://github.com/IvanFoksha/test_aplication cd test_aplication/ -
Создайте файл
.env: Скопируйте файл.env.example(если бы он был) или создайте.envвручную в корне проекта со следующим содержимым:DATABASE_URL="postgresql://user:password@localhost:5433/testdb" API_KEY="secret-api-key"
API_KEY- это ваш ключ для доступа к API. Вы можете установить любое значение. -
Запустите проект с помощью Docker Compose: Выполните команду в корневой папке проекта:
docker-compose up --build -d
Эта команда соберет образ приложения, запустит контейнер с приложением и контейнер с базой данных PostgreSQL, а также применит все миграции.
-
Проект готов к работе! Приложение будет доступно по адресу
http://localhost:8000.
Все запросы к защищенным эндпоинтам должны содержать заголовок X-API-KEY с вашим ключом из .env файла.
После запуска приложения автоматически генерируемая интерактивная документация доступна по двум адресам:
- Swagger UI:
http://localhost:8000/docs - Redoc:
http://localhost:8000/redoc
В этой документации вы можете не только посмотреть все доступные эндпоинты, их параметры и схемы ответов, но и выполнять запросы прямо из браузера.
-
Получить список всех зданий:
curl -X GET "http://localhost:8000/api/v1/buildings/" \ -H "X-API-KEY: secret-api-key"
-
Получить организацию с ID=1:
curl -X GET "http://localhost:8000/api/v1/organizations/1" \ -H "X-API-KEY: secret-api-key"
-
Найти организации по названию "Рога":
curl -X GET "http://localhost:8000/api/v1/organizations/search/name/?name=Рога" \ -H "X-API-KEY: secret-api-key"
-
Найти организации в радиусе 10 км от центра Москвы:
curl -X GET "http://localhost:8000/api/v1/organizations/search/location/?latitude=55.7558&longitude=37.6173&radius=10" \ -H "X-API-KEY: secret-api-key"
Чтобы остановить все контейнеры, выполните команду:
docker-compose down