# Elemento-Customers

Используется для хранения и обработки данных клиентов: их основных атрибутов, параметров анкеты, контактной информации,
базовой статистики и т.д. Описание доступных методов смотри в `docs/api.http`.

Конкретный набор хранимых данных зависит от настроек анкеты.

# Запуск сервера

Стандартный как для всех Kaiju приложений.

Сервер клиентов требует подключения к `postgres` серверу бд для хранения таблицы клиентов и
структурированных атрибутов анкеты.

Также сервер требует `redis` с установленным `redis-search` модулем (только при `search_enabled=true`) для поисковых
запросов по данным анкет.

# Описание важных настроек

- `services_db_host` : str - IP или адрес postgres сервера базы данных
- `services_db_port`: int - порт postgres сервера базы данных
- `services_db_database` : str - имя базы данных
- `services_db_user` : str - имя пользователя postgres (должен обладать правами создавать таблицы)
- `services_db_password` : str - пароль для учетной записи пользователя postgres
- `search_enabled` : bool - включить или выключить поисковые сервисы в redis
- `services_redis_host` : str - IP или адрес сервера redis
- `services_redis_port` : int - порт сервера redis
- `services_redis_db` : int - номер базы данных в redis
- `services_redis_password` : str - пароль для сервера redis
- `services_redis_cluster`: bool - использовать клиент для кластера redis

# Поддержка

- Периодический вызов `Customers.search.idx.migrate` для перестройки поискового индекса и избежания расхождений.
- Периодический вызов `brin_summarize_new_values(idx_customers_id)` в Postgres для оптимизации BRIN индекса.

# Установка для разработки

1. Клонировать проект из git
2. Зайти в директорию проекта и запустить скрипт разработки: `sh setup-dev.sh`
3. ...
4. Проверить запуск с помощью `python -m app`
5. Для запуска в локальной среде рекомендуется установить docker-compose использовать `docker-compose.yaml`.

# Краткое описание работы

1. Сервер хранит структурированный набор анкетных атрибутов клиентов из которых создает модель для валидации входных
   данных.
2. При создании клиента ему присваивается автоинкрементный `id` и создается учетная запись в таблице `customers`. Помимо
   присвоения `id` телефон также является уникальным обязательным атрибутом анкеты и проверяется по индексу БД при создании
   учетной записи.
3. При включенном redis данные по анкете также копируются в поисковый индекс. Ошибка при копировании будет проигнорирована.
