# Elemento-Cart

Используется для хранения и предварительного расчета корзины товаров покупателя. Хранит как корзины авторизованных,
так и неавторизованных покупателей.

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

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

Сервер требует Redis подключения для хранения данных. Желательно наличие 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
- `prices_host`: url - адрес и порт сервера с сервисом цен
- `stocks_host`: url - адрес и порт сервера с сервисом товарных остатков
- `guest_cart_lifetime_d`: int - срок хранения корзины неавторизованного пользователя в днях
- `customer_cart_lifetime_d`: int - срок хранения корзины авторизованного пользователя в днях
- `min_item_price`: int - минимальная стоимость единицы товара в корзине
- `max_positions`: int - максимальное количество позиций товара в корзине

# Поддержка

Не требует какой-то особой поддержки кроме поддержания функционирования Redis.

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

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

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

1. Сервер хранит корзины в виде объектов с количеством товаров в Redis. Авторизованные и неавторизованные
   корзины разделены по типам ключей. Авторизованный пользователь может хранить только одну общую для всех его сессий
   корзину.
2. При запросе или изменении корзины выполняется запрос к сервисам остатков и цен для определения актуальности товаров,
   наличия цены и количества. Выполняется предварительный расчет корзины. Неактуальные товары удаляются автоматически.
3. Пустые и старые корзины удаляются либо самим сервисом, либо по истечении времени жизни.
