Простой REST API для полнотекстового поиска документов.
Стек: FastAPI, SQLAlchemy 2.0 (asyncpg), PostgreSQL 16, Elasticsearch 8, Pydantic, Docker, Pytest.
-
Переименуйте
.env.exampleв.env:cp .env.example .env
-
Поднимите контейнеры:
docker compose up -d --build
(При первом запуске автоматически создадутся основная и тестовая базы данных).
-
Загрузите тестовые данные из
data/posts.csvв базу и индекс:docker compose exec api python -m scripts.load_data
После запуска интерактивная документация (Swagger) доступна по адресу: http://localhost:8000/docs
Файл OpenAPI (docs.json) можно сгенерировать командой:
docker compose exec api python -m scripts.export_docsТесты используют отдельную тестовую БД (search_db_test). Каждому тесту выделяется изолированная транзакция, которая откатывается после завершения, поэтому тесты работают быстро и не оставляют мусора.
docker compose exec api pytest -vПроект намеренно не перегружен слоистой архитектурой (Repository / Service / Router) во избежание оверинжиниринга. Логика работы двух эндпоинтов лаконично умещается в роутере