docs/concepts/README.md

18 lines
4.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## Привилегия
Привилегия - единица предоставления услуг конечному пользователю. Список привилегий определяется при разработке сервиса и публикуется\обновляется при каждом запуске сервиса. Ответственен за публикацию своих привилегий непосредственно конечный сервис. Привилегии нужны для создания тарифов, ибо тариф - набор привилегий и их количества, снабженный ценой и общим описанием.
При покупке пользователем тарифа, привилегии, перечисленные в этом тарифе добавляются в аккаунт этого пользователя. "Трату" привилегий и ограничения налагаемые ограниченным количеством той или иной привилегии обрабатывает сам конечный сервис.
При окончании количества привилегии, конечный сервис должен оповестить customer сервис об этом, добавив запись в историю.
## Аккаунт
Аккаунт - сущность обеспечивающая связь между customer сервисом и конечным продуктовым сервисом. Каждый продуктовый сервис имеет набор тарифов, описывающих ограниченность доступа конкретного аккаунта к услугам, которые предоставляет сервис. При покупке тарифа в customer сервисе, тот публикует данные о купленном тарифе в очередь redpanda, а конечный продуктовый сервис, подписанный на этот топик, получив из очереди информацию о том, что такой-то юзер купил тариф относящийся к нему, должен внести приобретенные привилегии в аккаунт пользователя, купившего тариф.
При использовании услуг продуктового сервиса, он обращается к полям аккаунта, для того чтобы определять, доступна ли этому пользователю данная услуга или же он уже выработал квоту, определённую приобретенным им тарифом.
Так же, в аккаунте хранятся дополнительные настройки, необходимые для взаимодействия пользователя с конечным продуктовым сервисом, но лишние в customer сервисе, т.е. сервисоспецифичные настройки. Например, токены доступа к яндекс диску
Область отвественности аккаунта - хранение данных о пользователе, специфичных для данного сервиса, в том числе, о доступных ему привилегиях. Дублирования информации не происходит - customer сервис хранит только данные о корзине пользователя, о кошельке и историю. При оплате корзины, customer сервис передает продуктовым сервисам данные о оплаченных тарифах и сервисы сами обновляют аккаунт пользователя, который приобрел тариф,добавляя ему соответствующие привелегии. Так же, сам продуктовый сервис следит об окончании той или иной привилегии, о чем оповещает customer сервис.
Отдельного сервиса для хранения и получения аккаунтов нет и, надеюсь, не будет, ибио это сильно увеличит связность системы - этому сервису придётся знать модель аккаунта каждого подключенного к нему сервиса.
Примерный список api методов, который должен быть у сервиса для работы с аккаунтом https://penahub.gitlab.yandexcloud.net/pena-services/customer/-/blob/dev/api/openapi/v1/openapi.yaml?ref_type=heads - в секции Account