diff --git a/docs/diagram/README.md b/docs/diagram/README.md index 17f0b53..06b839e 100644 --- a/docs/diagram/README.md +++ b/docs/diagram/README.md @@ -1,27 +1,60 @@ --- -**UseCase авторизации пользователя (Пользователь существует / Пароль верный / Аккаунт не существует):** +**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 AuthService participant HubAdminService +participant DiscountService participant PaymentService participant CBRFService -database AuthServiceDB -database ServiceDB +database CustomerServiceDB -Frontend -> AuthService : Запрос на авторизацию пользователя -AuthService -> AuthServiceDB : Запрос на существования пользователя -AuthService <-- AuthServiceDB : Ответ: пользователь существует -AuthService -> AuthService : Проверка пароля (пароль верный) -Frontend <-- AuthService : Ответ успешной авторизации: \n- refreshToken в onlyHttp куках\n- accessToken в body \n- информация о пользователе -Frontend -> Frontend : Записывает accessToken в store (Redux / Recoil) -Frontend -> Service : Запрос на получение аккаунта \n- accessToken должен храниться \nв Authorization Header \nиспользуя метод Bearer -Service -> ServiceDB : Проверка на \nсуществование аккаунта -Service <-- ServiceDB : Ответ: \nаккаунта не существует -Frontend <-- Service : Ошибка: аккаунта не существует +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) ``` ## Relationships @@ -30,9 +63,10 @@ Frontend <-- Service : Ошибка: аккаунта не существует !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(CbrfService, "CBRF Worker Service", "Golang", "Сервис по выдаче и перевода курсов валют") -Container(PaymentService, "Payment Service", "Golang", "Платёжный сервис") +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", "Хранит информацию об аккаунтах") @@ -45,6 +79,7 @@ Rel(CustomerService, AuthService, "Использует для получени Rel(CustomerService, CbrfService, "Использует для перевода валюты с одного курса на другой") Rel(CustomerService, PaymentService, "Использует для проведения оплаты, получения платёжной ссылки и уведомления об успешной/не_успешной оплате") Rel(CustomerService, HubadminService, "Использует для получения информации о тарифах") +Rel(CustomerService, DiscountService, "Использует для приминения скидок") Rel_R(CustomerService, CustomerDB, "Читает/Записывает") Rel_R(AuthService, AuthServiceDB, "Читает/Записывает")