docs: pay case

This commit is contained in:
Kirill 2023-06-28 15:58:15 +03:00
parent 807b6ca545
commit ce2385b45b

@ -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 ```plantuml
participant Frontend participant Frontend
participant CustomerService participant CustomerService
participant AuthService participant AuthService
participant HubAdminService participant HubAdminService
participant DiscountService
participant PaymentService participant PaymentService
participant CBRFService participant CBRFService
database AuthServiceDB database CustomerServiceDB
database ServiceDB
Frontend -> AuthService : Запрос на авторизацию пользователя Frontend -> CustomerService : Начало оплаты
AuthService -> AuthServiceDB : Запрос на существования пользователя CustomerService -> CustomerServiceDB : Поиск аккаунта по ID
AuthService <-- AuthServiceDB : Ответ: пользователь существует CustomerService <-- CustomerServiceDB : Найденный аккаунт
AuthService -> AuthService : Проверка пароля (пароль верный) CustomerService -> HubAdminService : Получение тарифов из массива id тарифов в корзине
Frontend <-- AuthService : Ответ успешной авторизации: \n- refreshToken в onlyHttp куках\n- accessToken в body \n- информация о пользователе CustomerService <-- HubAdminService : Список тарифов
Frontend -> Frontend : Записывает accessToken в store (Redux / Recoil) CustomerService -> CustomerService : Подсчитывается сумма тарифов
Frontend -> Service : Запрос на получение аккаунта \n- accessToken должен храниться \nв Authorization Header \nиспользуя метод Bearer <accessToken> CustomerService <-- CustomerService : Сумма тарифов
Service -> ServiceDB : Проверка на \nсуществование аккаунта CustomerService -> DiscountService : Приминение скидок
Service <-- ServiceDB : Ответ: \nаккаунта не существует CustomerService <-- DiscountService : Сформированная цена после применения скидок
Frontend <-- Service : Ошибка: аккаунта не существует CustomerService -> CustomerService : Проверка на наличие средств
CustomerService <-- CustomerService : Средств не достаточно
Frontend <-- CustomerService : Ответ об ошибке по причине нехватки средств (insufficient funds: 50)
``` ```
## Relationships ## Relationships
@ -30,9 +63,10 @@ Frontend <-- Service : Ошибка: аккаунта не существует
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml !include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
Container(CustomerService, "Customer Service", "Golang", "Сервис customer") Container(CustomerService, "Customer Service", "Golang", "Сервис customer")
Container(AuthService, "Auth Service", "NodeJS", "Сервис единой авторизации") Container(AuthService, "Auth Service", "NodeJS", "Микросервис единой авторизации")
Container(CbrfService, "CBRF Worker Service", "Golang", "Сервис по выдаче и перевода курсов валют") Container(DiscountService, "Discount Service", "Golang", "Микросервис скидок")
Container(PaymentService, "Payment Service", "Golang", "Платёжный сервис") Container(CbrfService, "CBRF Worker Service", "Golang", "Микросервис по выдаче и перевода курсов валют")
Container(PaymentService, "Payment Service", "Golang", "Платёжный микросервис")
Container(HubadminService, "Hub admin Service", "NodeJS", "Севрис управления тарифами и привелегиями") Container(HubadminService, "Hub admin Service", "NodeJS", "Севрис управления тарифами и привелегиями")
ContainerDb(CustomerDB, "Customer Service Database", "MongoDB", "Хранит информацию об аккаунтах") ContainerDb(CustomerDB, "Customer Service Database", "MongoDB", "Хранит информацию об аккаунтах")
@ -45,6 +79,7 @@ Rel(CustomerService, AuthService, "Использует для получени
Rel(CustomerService, CbrfService, "Использует для перевода валюты с одного курса на другой") Rel(CustomerService, CbrfService, "Использует для перевода валюты с одного курса на другой")
Rel(CustomerService, PaymentService, "Использует для проведения оплаты, получения платёжной ссылки и уведомления об успешной/не_успешной оплате") Rel(CustomerService, PaymentService, "Использует для проведения оплаты, получения платёжной ссылки и уведомления об успешной/не_успешной оплате")
Rel(CustomerService, HubadminService, "Использует для получения информации о тарифах") Rel(CustomerService, HubadminService, "Использует для получения информации о тарифах")
Rel(CustomerService, DiscountService, "Использует для приминения скидок")
Rel_R(CustomerService, CustomerDB, "Читает/Записывает") Rel_R(CustomerService, CustomerDB, "Читает/Записывает")
Rel_R(AuthService, AuthServiceDB, "Читает/Записывает") Rel_R(AuthService, AuthServiceDB, "Читает/Записывает")