# Отчет: Реализация отправки данных о пользователе в ClickHouse с использованием Go
## Введение
В рамках задачи было необходимо реализовать отправку данных о пользователе в ClickHouse с использованием языка программирования Go. В отчете описаны выполненные шаги, включая настройку окружения, создание таблицы в ClickHouse, написание кода на Go и проверку результатов.
## Выполненные действия
### Установка ClickHouse
Для начала работы с ClickHouse была выполнена его установка на сервер. Использовалась команда для Ubuntu/Debian:
Целью данного проекта была разработка сервиса для показа баннеров пользователю. Сервис должен быть масштабируемым, производительным и легко интегрируемым в существующую инфраструктуру.
## Анализ требований
1. Перед началом разработки были проанализированы основные требования к сервису:
2. Возможность показа баннеров пользователю на основе его характеристик (например, возраст, пол, интересы).
3. Поддержка различных типов баннеров (статичные, анимированные, видео).
4. Учет статистики показов и кликов для каждого баннера.
5. Возможность управления баннерами через административную панель (добавление, редактирование, удаление).
6. Высокая производительность и низкая задержка при показе баннеров.
7. Масштабируемость для обработки большого количества запросов.
8. Безопасность данных и защита от злоупотреблений.
## Разработка
### API для показа баннеров:
1. Реализован эндпоинт /api/banners, который принимает данные пользователя и возвращает наиболее релевантный баннер.
2. Логика выбора баннера основана на алгоритме машинного обучения (рекомендательная система).
### API для управления баннерами:
1. Эндпоинты для CRUD операций с баннерами (/api/banners/create, /api/banners/update, /api/banners/delete).
2. Валидация данных и проверка прав доступа.
### Статистика:
1. Реализован сбор статистики показов и кликов.
2. Данные хранятся в отдельной таблице базы данных и доступны для анализа через API.
Реализация чтения сообщений из Kafka и отображения баннера на Go
## Описание задачи
Необходимо реализовать систему, которая читает сообщения из Kafka, содержащие информацию о действиях пользователя, и на основе этих данных показывает соответствующий баннер.
## Выполненные действия:
### Настройка Kafka:
- Установлен и настроен Kafka-брокер.
- Создан топик user_actions для отправки сообщений о действиях пользователя.
- Настроен продюсер для отправки тестовых сообщений в топик.
### Реализация потребителя (Consumer) Kafka на Go:
- Использована библиотека sarama для работы с Kafka в Go.
- Написан потребитель, который подписывается на топик user_actions и читает сообщения в реальном времени.
- Реализована обработка сообщений, содержащих информацию о действиях пользователя (например, user_id, action_type, timestamp).
### Логика отображения баннера:
На основе типа действия (action_type) определяется, какой баннер необходимо показать.
Реализована логика отображения баннера:
- Если действие view_product, показывается баннер с рекомендациями товаров.
- Если действие add_to_cart, показывается баннер с предложением оформить заказ.
- Если действие purchase, показывается баннер с благодарностью за покупку.
## Пример сообщения в Kafka:
```json
{
"user_id":"12345",
"action_type":"add_to_cart",
"timestamp":"2023-10-01T12:34:56Z"
}
```
## Пример отображения баннера:
При получении сообщения с action_type = "add_to_cart", на фронтенде отображается баннер с текстом: "Товар добавлен в корзину! Оформите заказ сейчас и получите скидку 10%!"
## Заключение:
Задача успешно реализована. Система корректно читает сообщения из Kafka, обрабатывает их и отображает соответствующий баннер на основе действий пользователя.