Skip to content

Analytics backend service for data aggregation and API delivery, powered by FastAPI, SQLAlchemy, PostgreSQL, and Docker.

License

Notifications You must be signed in to change notification settings

NkvMax/python_dev_nikolaev_maxim

Repository files navigation

Аналитический сервис для агрегации пользовательской активности

Backend-приложение, которое формирует аналитические датасеты на основе данных о пользовательской активности. Сервис агрегирует данные из нескольких баз данных и предоставляет их в формате JSON через REST API.

Python FastAPI SQLAlchemy PostgreSQL Pytest Pydantic Uvicorn Alembic Testcontainers Stars Forks License

Возможности

  • 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/

Запуск проекта

Развернуть инструкции
  1. Установите зависимости:
pip install -r requirements.txt
  1. Создайте .env файл на основе .env.example:
cp .env.example .env
  1. Примените миграции базы данных:
alembic upgrade heads
  1. Запустите FastAPI приложение:
uvicorn app.main:app --reload

Сервис будет доступен по адресу: http://127.0.0.1:8000/

Примеры вызовов API

Развернуть примеры

Получить датасет комментариев пользователя:

Запрос:

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
    }
  ]
}

License

MIT

About

Analytics backend service for data aggregation and API delivery, powered by FastAPI, SQLAlchemy, PostgreSQL, and Docker.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published