Service which collects posts from VK (using VK API), caches recent data with InfiniSpan, provides analytical insights
Репозиторий организован по принципу «монорепозитория» и содержит три основных микросервиса, а также общий Docker Compose для их одновременного запуска.
Основные сервисы:
- Infinispan — кеш-хранилище (непосредственно указано в
docker-compose.yml). - data-scrapper — Python-скрипт для сбора/обработки данных.
- server — C# ASP.NET Core-приложение (Web API) для выдачи/агрегации данных.
- ui — фронтенд-приложение (React или Vue).
-
docker-compose.yml- Главный файл для развёртывания всех сервисов:
- Поднимает контейнеры
infinispan,data-scrapper,serverиui. - Настраивает порты и основные переменные окружения для каждого сервиса.
- Поднимает контейнеры
- Главный файл для развёртывания всех сервисов:
-
.gitignore/.dockerignore- Шаблоны, позволяющие исключать временные файлы из репозитория и сборки Docker-образов.
- Назначение: Python-скрипт для периодического сбора/обработки данных с записью в кеш (Infinispan).
- Содержимое:
Dockerfile: описывает базу (Python), установку зависимостей изrequirements.txtи запускmain.py.requirements.txt: список Python-зависимостей.main.pyили другой основной скрипт: входная точка (точка запуска).
При запуске docker-compose up --build в корне проекта создаётся Docker-образ сервиса data-scrapper, который использует переменные окружения из docker-compose.yml для доступа к Infinispan.
- Назначение: C# ASP.NET Core-приложение, обрабатывающее данные из кеша. Предоставляет Web API для
uiи других потенциальных клиентов. - Содержимое:
.sln-файл (решение) и проекты:.Web(или аналог) — ASP.NET Core Web API..Core— бизнес-логика, если применимо..Infrastructure— работа с внешними источниками (Infinispan, базы данных и т. п.).
Dockerfile: инструкции по сборке .NET-приложения (включаяdotnet restore,dotnet build,dotnet publish) и проброс порта (обычно80внутри контейнера, снаружи маппится на8080).
- Назначение: Фронтенд-приложение, написанное на React/Vue.
- Содержимое:
package.json/package-lock.json(илиyarn.lock): описывают зависимости.- Исходники в
src/, статические или публичные файлы вpublic/(React) илиdist/(Vue, после сборки). Dockerfile: может быть в двух вариантах:- Dev-сервер (Node.js) с Hot Reload для разработки.
- Production-сборка (мульти-стейдж: сборка → копирование статических файлов в Nginx).
- Установите Docker и Docker Compose (убедитесь, что они работают корректно).
- Клонируйте репозиторий:
git clone https://github.com/razrez/data-aggregator.git cd data-aggregator/src - Соберите и запустите все сервисы командой:
docker-compose up --build
- Будут собраны образы всех сервисов.
- Запустятся контейнеры infinispan, data-scrapper, server и ui.
- Проверьте:
- Infinispan по порту 11222.
- server по адресу http://localhost:8080 (Web API).
- ui по адресу http://localhost:3000 (React/Vue-приложение).
Ниже приведены примеры HTTP-запросов (в формате curl) для проверки основных методов Minimal API.
- Получить один пост по ключу
curl -X GET "http://localhost:8080/posts/1466831" - 1466831 – пример ключа, который был сохранён в Infinispan (смотри логи Python-сервиса).
- Порт (8080) и маршрут (/posts) могут отличаться в зависимости от конфигурации.
- Получить последние N постов
curl -X GET "http://localhost:8080/posts?limit=5"- Параметр limit указывает, сколько постов отдать (сортировка по дате убывания).
- Получить статистику по хэштегам за период
curl -X GET "http://localhost:8080/analytics?startDate=2025-01-20&endDate=2025-01-27"- Параметры startDate и endDate указывают даты начала и конца периода (в формате YYYY-MM-DD).
- В ответе придёт JSON c подсчётом встреченных хэштегов (например, #vk, #books и т. д.).
- Swagger (опционально) Если приложение запущено в Development режиме, откройте в браузере и тестируйте эндпоинты через веб-интерфейс:
http://localhost:8080/swagger