# Диаграммы последовательности и зависимостей ## UseCase оплата корзины (успешно) ```plantuml participant Frontend participant CustomerService participant HubAdminService participant DiscountService database CustomerServiceDB Frontend -> CustomerService : Запрос на оплату CustomerService -> CustomerServiceDB : Поиск аккаунта по ID пользователья единой авторизации CustomerService <-- CustomerServiceDB : Найденный аккаунт CustomerService -> HubAdminService : Получение тарифов из массива id тарифов в корзине CustomerService <-- HubAdminService : Список тарифов CustomerService -> CustomerService : Подсчитывается сумма тарифов CustomerService <-- CustomerService : Сумма тарифов CustomerService -> DiscountService : Приминение скидок CustomerService <-- DiscountService : Сформированная цена после применения скидок CustomerService -> CustomerService : Проверка на наличие средств CustomerService <-- CustomerService : Средств достаточно CustomerService -> CustomerServiceDB : Списание средств с кошелька CustomerService <-- CustomerServiceDB : Обновлённый аккаунт CustomerService -> CustomerServiceDB : Запись в историю успех оплаты (ошибка игнорируется) CustomerService <-- CustomerServiceDB : Записанная история CustomerService -> CustomerServiceDB : Очистка корзины CustomerService <-- CustomerServiceDB : Обновлённый аккаунт Frontend <-- CustomerService : Ответ об успешной оплате корзины ``` --- ## UseCase оплата корзины (недостаточно средств) ```plantuml participant Frontend participant CustomerService participant HubAdminService participant DiscountService database CustomerServiceDB Frontend -> CustomerService : Запрос на оплату CustomerService -> CustomerServiceDB : Поиск аккаунта по ID пользователья единой авторизации CustomerService <-- CustomerServiceDB : Найденный аккаунт CustomerService -> HubAdminService : Получение тарифов из массива id тарифов в корзине CustomerService <-- HubAdminService : Список тарифов CustomerService -> CustomerService : Подсчитывается сумма тарифов CustomerService <-- CustomerService : Сумма тарифов CustomerService -> DiscountService : Приминение скидок CustomerService <-- DiscountService : Сформированная цена после применения скидок CustomerService -> CustomerService : Проверка на наличие средств CustomerService <-- CustomerService : Средств не достаточно Frontend <-- CustomerService : Ответ об ошибке по причине нехватки средств (insufficient funds: 50) ``` --- ## UseCase получение ссылки на оплату для пополнения средств в корзине (успешно) ```plantuml participant Frontend participant CustomerService participant PaymentService database CustomerServiceDB Frontend -> CustomerService : Запрос на получение ссылки CustomerService -> CustomerService : Определение способа оплаты CustomerService <-- CustomerService : Успешно определено CustomerService -> PaymentService : Запрос на получение платёжной ссылки CustomerService <-- PaymentService : Платёжная ссылка Frontend <-- CustomerService : Платёжная ссылка ``` --- ## UseCase изменения валюты в кошельке (успешно) ```plantuml participant Frontend participant CustomerService participant CbrfService database CustomerServiceDB Frontend -> CustomerService : Запрос на изменения валюты CustomerService -> CustomerServiceDB : Получение аккаунта по ID пользователья единой авторизации CustomerService <-- CustomerServiceDB : Найденный аккаунт CustomerService -> CbrfService : Перевод валюты с одной на другую CustomerService <-- CbrfService : Результат перевода валюты CustomerService -> CustomerServiceDB : Обновление кошелька аккаунта CustomerService <-- CustomerServiceDB : Обновлённый аккаунт Frontend <-- CustomerService : Обновлённый аккаунт ``` --- ## UseCase регистрация аккаунта (успешно) ```plantuml participant Frontend participant CustomerService participant AuthService database CustomerServiceDB Frontend -> CustomerService : Запрос на регистрацию аккаунта CustomerService -> CustomerServiceDB : Поиск аккаунта по ID пользователя единой авторизации CustomerService <-- CustomerServiceDB : Ошибка: аккаунт не найден CustomerService -> AuthService : Поиск пользователя единой авторизации по ID CustomerService <-- AuthService : Найденный пользователь CustomerService -> CustomerServiceDB : Создание аккаунта с прикрученным \nID пользователя единой авторизации CustomerService <-- CustomerServiceDB : Созданный аккаунт Frontend <-- CustomerService : Созданный аккаунт ``` --- ## UseCase уведомление об успешной оплате (успешно, id платежей не равны) ```plantuml participant PaymentService participant CustomerService database CustomerServiceDB PaymentService -> CustomerService : Запрос отправки уведомления об успешной оплате CustomerService -> CustomerServiceDB : Поиск аккаунта по ID пользователя единой авторизации CustomerService <-- CustomerServiceDB : Найденный аккаунт CustomerService -> CustomerService : Сравнение ID платежа с прошлым CustomerService <-- CustomerService : ID платежей не равны CustomerService -> CustomerServiceDB : Изменение кошелька аккаунта CustomerService <-- CustomerServiceDB : Обновлённый аккаунт CustomerService -> CustomerServiceDB : Создание истории об успешном пополнении средств CustomerService <-- CustomerServiceDB : Созданная история PaymentService <-- CustomerService : Успешный ответ ``` --- ## UseCase уведомление об успешной оплате (успешно, id платежей равны) ```plantuml participant PaymentService participant CustomerService database CustomerServiceDB PaymentService -> CustomerService : Запрос отправки уведомления об успешной оплате CustomerService -> CustomerServiceDB : Поиск аккаунта по ID пользователя единой авторизации CustomerService <-- CustomerServiceDB : Найденный аккаунт CustomerService -> CustomerService : Сравнение ID платежа с прошлым CustomerService <-- CustomerService : ID платежей равны PaymentService <-- CustomerService : Успешный ответ ``` ## Диаграмма зависимостей ```plantuml !include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml Container(CustomerService, "Customer Service", "Golang", "Сервис customer") Container(AuthService, "Auth Service", "NodeJS", "Микросервис единой авторизации") Container(DiscountService, "Discount Service", "Golang", "Микросервис скидок") Container(CbrfService, "CBRF Worker Service", "Golang", "Микросервис по выдаче и перевода курсов валют") Container(PaymentService, "Payment Service", "Golang", "Платёжный микросервис") Container(HubadminService, "Hub admin Service", "NodeJS", "Севрис управления тарифами и привелегиями") ContainerDb(CustomerDB, "Customer Service Database", "MongoDB", "Хранит информацию об аккаунтах") ContainerDb(AuthServiceDB, "Auth Service Database", "MongoDB", "Хранит информацию о пользователях и сессиях") ContainerDb(CbrfServiceDB, "CBRF Worker Database", "MongoDB", "Хранит информацию о курсах валют") ContainerDb(PaymentServiceDB, "Payment Service Database", "MongoDB", "Хранит информацию о платежах и их состоянии") ContainerDb(HubadminServiceDB, "Hubadmin service Database", "MongoDB", "Хранит информацию о тарифах и привелегиях") Rel(CustomerService, AuthService, "Использует для получения актуальной информации о пользователе") Rel(CustomerService, CbrfService, "Использует для перевода валюты с одного курса на другой") Rel(CustomerService, PaymentService, "Использует для проведения оплаты, получения платёжной ссылки и уведомления об успешной/не_успешной оплате") Rel(CustomerService, HubadminService, "Использует для получения информации о тарифах") Rel(CustomerService, DiscountService, "Использует для приминения скидок") Rel_R(CustomerService, CustomerDB, "Читает/Записывает") Rel_R(AuthService, AuthServiceDB, "Читает/Записывает") Rel_R(CbrfService, CbrfServiceDB, "Читает/Записывает") Rel_R(PaymentService, PaymentServiceDB, "Читает/Записывает") Rel_R(HubadminService, HubadminServiceDB, "Читает/Записывает") ```