Backend-приложение, которое формирует аналитические датасеты на основе данных о пользовательской активности. Сервис агрегирует данные из нескольких баз данных и предоставляет их в формате JSON через REST API.
- REST API на FastAPI: Эндпоинты для формирования двух типов датасетов по логину пользователя: comments (информация о комментариях к постам) и general (общая статистика действий: входы, выходы, действия в блогах).
- Слоистая архитектура: Четкое разделение бизнес-логики, инфраструктуры и контроллеров для легкого расширения (например, переход на ClickHouse).
- Интеграция с БД: SQLAlchemy ORM для PostgreSQL, Alembic для миграций, единый справочник пользователей (db1.users) для согласованности данных между базами (db1/db2).
- Трехуровневое тестирование: Unit-тесты (pytest + mock), интеграционные (с реальными тестовыми БД), E2E (TestClient + Testcontainers для PostgreSQL).
Развернуть детали
Единый справочник пользователей
Создан единый справочник пользователей (db1.users) для идентификации авторов и участников активности в обеих базах данных (db1 и db2).
Причина:
Изначально в техническом задании таблица логов активности (db2.logs) хранила идентификаторы пользователей без единого справочника, что могло привести к несогласованности данных. Справочник решает эту проблему, упрощает интеграцию данных и предотвращает ошибки при агрегации.
Слоистая архитектура
- Четкое разделение слоев: бизнес-логика отделена от инфраструктуры и контроллеров.
- Простота расширения: переход от PostgreSQL к ClickHouse без изменения бизнес-логики.
- Прозрачное тестирование: юнит-тесты легко поддерживать и расширять.
- Документированность: наличие документации упрощает сопровождение и развитие проекта.
Развернуть детали
Реализована трехуровневая система тестирования:
- Unit-тесты (pytest, mock): проверяют бизнес-логику с моками вместо реальных запросов к БД.
- Интеграционные тесты: проверяют взаимодействие с реальными тестовыми базами данных.
- E2E-тесты: проверяют всю цепочку вызовов API через TestClient (FastAPI) и Testcontainers PostgreSQL.
Запуск всех тестов:
pip install -r requirements.txt
pytest tests/Развернуть инструкции
- Установите зависимости:
pip install -r requirements.txt- Создайте
.envфайл на основе.env.example:
cp .env.example .env- Примените миграции базы данных:
alembic upgrade heads- Запустите FastAPI приложение:
uvicorn app.main:app --reloadСервис будет доступен по адресу: http://127.0.0.1:8000/
Развернуть примеры
Запрос:
GET http://localhost:8000/api/comments/?login=vladimir
Ответ:
{
"status": "ok",
"data": [
{
"user_login": "vladimir",
"post_header": "ЖК Эдельвейс",
"post_author_login": "vladimir",
"total_comments": 1
}
]
}Запрос:
GET http://localhost:8000/api/general/?login=vladimir
Ответ:
{
"status": "ok",
"data": [
{
"date": "2025-06-29",
"logins": 1,
"logouts": 1,
"blog_actions": 0
}
]
}MIT