2023-05-14 21:47:40 +00:00
openapi : 3.0 .1
info :
title : Customer - сервис для управления клиентами
description : |-
Область ответственности сервиса - предоставление пользователю функционала корзины и кошелька.
version : 1.0 .0
tags :
- name : account
description : аккаунт
- name : currency
description : доступные валюты
- name : cart
description : корзина
- name : wallet
description : кошелёк
- name : history
description : история
paths :
/account :
get :
tags :
- account
summary : Получение текущего аккаунта юзера
description : используется при заходе юзера в систему. Айдишник юзера получает из токена, который передаётся в заголовке authorization
operationId : getAccount
responses :
'200' :
description : успешное получение
content :
application/json :
schema :
$ref : '#/components/schemas/Account'
'401' :
description : Неавторизован
'404' :
description : Такого пользователя нет
post :
tags :
- account
summary : создать новый аккаунт
description : создаёт новый аккаунт для юзера, если такого ещё не было
operationId : addAccount
responses :
'201' :
description : успешное созание аккаунта
content :
application/json :
schema :
$ref : '#/components/schemas/Account'
'401' :
description : Неавторизован
delete :
tags :
- account
summary : удалить собственный аккаунт
description : помечает аккаунт удалённым
operationId : deleteAccount
responses :
'200' :
description : успешное удаление аккаунта
'401' :
description : Неавторизован
/accounts :
get :
tags :
- account
summary : списко аккаунтов с пагинацией
description : получает список аккаунтов на указанной странице + общее количество аккаунтов
operationId : paginationAccounts
parameters :
- name : p
in : query
description : Номер страницы, начиная с 0
required : false
explode : false
schema :
type : integer
default : 0
- name : s
in : query
description : размер страницы
required : false
explode : false
schema :
type : integer
default : 10
responses :
'200' :
description : успешное получение страницы аккаунтов
content :
application/json :
schema :
type : object
properties :
count :
type : integer
example : 11
items :
type : array
items :
$ref : "#/components/schemas/Account"
'401' :
description : Неавторизован
/account/{accountId}:
get :
tags :
- account
summary : получить аккаунт по айди
description : метод необходимый в основном только менеджерам, для получения данных о клиенте
operationId : getDirectAccount
parameters :
- name : accountId
in : path
description : айдишник аккаунта
required : true
2023-05-15 16:41:04 +00:00
schema :
type : string
2023-05-14 21:47:40 +00:00
responses :
'200' :
description : успешное получение аккаунта
content :
application/json :
schema :
$ref : '#/components/schemas/Account'
'401' :
description : Неавторизован
'404' :
description : Нет такого пользователя
delete :
tags :
- account
summary : удалить аккаунт по айди
description : метод необходимый в основном только менеджерам, для удаления клиента
operationId : deleteDirectAccount
parameters :
- name : accountId
in : path
description : айдишник аккаунта
required : true
2023-05-15 16:41:04 +00:00
schema :
type : string
2023-05-14 21:47:40 +00:00
responses :
'200' :
description : успешное удаление аккаунта
'401' :
description : Неавторизован
'404' :
description : Нет такого пользователя
/currencies :
get :
tags :
- currency
summary : получить список одобренных валют
operationId : getCurrencies
responses :
'200' :
description : успешное получение списка валют
content :
application/json :
schema :
type : array
example :
- "RUB"
- "USD"
- "CAD"
items :
type : string
patch :
tags :
- currency
summary : обновляет список одобренных валют
operationId : updateCurrencies
requestBody :
content :
application/json :
schema :
type : array
example :
- "RUB"
- "USD"
- "CAD"
items :
type : string
responses :
'401' :
description : Uanuthorized
/cart :
put :
tags :
- cart
summary : добавляем в корзину тариф
description : 'необходимо проверить, что такой тариф существует'
operationId : add2cart
requestBody :
content :
application/json :
schema :
type : object
properties :
id :
type : string
example : "807f1f77bcf81cd799439011"
responses :
'200' :
description : добавлено в корзину
'401' :
description : неавторизован
'404' :
description : не найден такой тариф
delete :
tags :
- cart
summary : удаляем из корзины тариф
operationId : removeFromCart
parameters :
- name : id
in : query
required : true
schema :
type : string
example : "807f1f77bcf81cd799439011"
responses :
'200' :
description : удалено из корзины
'401' :
description : неавторизован
'404' :
description : не найден такой тариф
2023-05-15 16:41:04 +00:00
/cart/pay :
2023-05-14 21:47:40 +00:00
post :
tags :
2023-05-15 16:41:04 +00:00
- cart
summary : оплатить козину
description : "- очевидно нужен воркер или очередь(место где можно потрогать кафку), которая будет слать запросы в конечные сервисы для добавления привилегий в аккаунт пользователя\n
- в случае если денег в кошельке достаточно - отправить в воркер или очередь задачи на разослать конкретным сервисам добавление привилегий\n
- если денег недостаточно, получить ссылку на оплату у сервиса платёжки и вернуть её. в случае оплаты, повторить вызов этого метода\n
- очистить корзину"
operationId : payCart
2023-05-14 21:47:40 +00:00
requestBody :
content :
application/json :
schema :
2023-05-15 16:41:04 +00:00
type : object
properties :
id :
type : string
description : айдишник для того, чтобы указать сервису оплаты, какой юзер оплатил
example : "807f1f77bcf81cd799439011"
2023-05-14 21:47:40 +00:00
responses :
'200' :
2023-05-15 16:41:04 +00:00
description : успешная оплата корзины
2023-05-14 21:47:40 +00:00
content :
application/json :
schema :
2023-05-15 16:41:04 +00:00
$ref : '#/components/schemas/Account'
'401' :
description : Неавторизован
/wallet :
patch :
2023-05-14 21:47:40 +00:00
tags :
2023-05-15 16:41:04 +00:00
- wallet
summary : изменить валюту кошелька
description : "при запросе:\n
- отвалидировать, что такая валюта одобрена \n
- получить данные из сервиса cbrf(выдам задачу на него чуть позднее)\n
- перевести валюту кошелька в нвоую валюту. кошелёк нарочно целочисленный, чтобы не было претензий к точности с плавающей точкой, поэтому, например долларовый счёт считается в центах"
operationId : changeCurrency
requestBody :
content :
application/json :
schema :
type : object
properties :
currency :
type : string
example : "USD"
2023-05-14 21:47:40 +00:00
responses :
'200' :
2023-05-15 16:41:04 +00:00
description : успешная смена валюты кошелька
2023-05-14 21:47:40 +00:00
content :
application/json :
schema :
2023-05-15 16:41:04 +00:00
$ref : "#/components/schemas/Account"
'401' :
description : Неавторизован
2023-05-14 21:47:40 +00:00
'400' :
2023-05-15 16:41:04 +00:00
description : Такая валюта не одобрена
put :
2023-05-14 21:47:40 +00:00
tags :
2023-05-15 16:41:04 +00:00
- wallet
summary : зачислить деньги на кошелёк
description : "прибавляем полученное значение к cash и при необходимости приводим к валюте кошелька"
operationId : putMoney
2023-05-14 21:47:40 +00:00
requestBody :
content :
application/json :
schema :
2023-05-15 16:41:04 +00:00
type : object
properties :
cash :
type : integer
example : 10000
currency :
type : string
example : "USD"
id :
type : string
example : "807f1f77bcf81cd799439011"
2023-05-14 21:47:40 +00:00
responses :
2023-05-15 16:41:04 +00:00
'200' :
description : успешное внесение денег на кошелёк
2023-05-14 21:47:40 +00:00
content :
application/json :
schema :
2023-05-15 16:41:04 +00:00
$ref : "#/components/schemas/Account"
'400' :
description : Такая валюта не одобрена
2023-05-14 21:47:40 +00:00
post :
tags :
2023-05-15 16:41:04 +00:00
- wallet
summary : запрос на получение ссылки на оплату
description : "- формируем запрос к сервису оплаты, с необходимыми постбэками\n
- получаем ответ от сервиса оплаты с ссылкой на оплату, которую надо передать пользователю"
operationId : requestMoney
2023-05-14 21:47:40 +00:00
requestBody :
content :
application/json :
schema :
2023-05-15 16:41:04 +00:00
type : object
properties :
cash :
type : integer
example : 10000
2023-05-14 21:47:40 +00:00
responses :
'200' :
2023-05-15 16:41:04 +00:00
description : успешный зпрос денег
2023-05-14 21:47:40 +00:00
content :
application/json :
schema :
2023-05-15 16:41:04 +00:00
type : object
properties :
link :
type : string
example : "https://google.ru"
'500' :
description : сервис оплаты вернул ошибку
/history :
2023-05-14 21:47:40 +00:00
get :
tags :
2023-05-15 16:41:04 +00:00
- history
summary : получение лога событий связанных с аккаунтом
operationId : getHistory
2023-05-14 21:47:40 +00:00
parameters :
2023-05-15 16:41:04 +00:00
- name : p
2023-05-14 21:47:40 +00:00
in : query
2023-05-15 16:41:04 +00:00
description : Номер страницы, начиная с 0
2023-05-14 21:47:40 +00:00
required : false
2023-05-15 16:41:04 +00:00
explode : false
2023-05-14 21:47:40 +00:00
schema :
2023-05-15 16:41:04 +00:00
type : integer
default : 0
- name : s
2023-05-14 21:47:40 +00:00
in : query
2023-05-15 16:41:04 +00:00
description : размер страницы
2023-05-14 21:47:40 +00:00
required : false
2023-05-15 16:41:04 +00:00
explode : false
2023-05-14 21:47:40 +00:00
schema :
2023-05-15 16:41:04 +00:00
type : integer
default : 10
2023-05-14 21:47:40 +00:00
responses :
'200' :
description : successful operation
content :
application/json :
schema :
2023-05-15 16:41:04 +00:00
type : object
properties :
count :
type : integer
example : 11
items :
type : array
items :
$ref : '#/components/schemas/Record'
'401' :
description : Неавторизован
post :
2023-05-14 21:47:40 +00:00
tags :
2023-05-15 16:41:04 +00:00
- history
summary : публикация лога в истории
operationId : add2history
2023-05-14 21:47:40 +00:00
requestBody :
content :
application/json :
schema :
2023-05-15 16:41:04 +00:00
$ref : "#/components/schemas/Record"
2023-05-14 21:47:40 +00:00
responses :
2023-05-15 16:41:04 +00:00
'200' :
2023-05-14 21:47:40 +00:00
description : successful operation
components :
schemas :
Account :
type : object
properties :
_id :
type : string
example : "807f1f77bcf81cd799439011"
userId :
type : string
example : "807f1f77bcf81cd799439011"
cart :
$ref : "#/components/schemas/Cart"
wallet :
$ref : "#/components/schemas/Wallet"
isDeleted :
type : boolean
example : false
Wallet :
type : object
properties :
currency :
type : string
example : "RUB"
cash :
type : integer
format : int64
example : 10701
2023-05-15 16:41:04 +00:00
money :
type : integer
format : int64
description : деньги на счету в копейках. Чтобы при перессчётах не возникало денег изниоткуда. фиксируемся к одной валюте, она будет внутренней, никому её не покажем
example : 10701
2023-05-14 21:47:40 +00:00
Cart :
type : array
items :
type : string
example :
- "807f1f77bcf81cd799439011"
- "807f1f77bcf81cd799439011"
- "807f1f77bcf81cd799439011"
2023-05-15 16:41:04 +00:00
Record :
2023-05-14 21:47:40 +00:00
type : object
properties :
id :
type : string
2023-05-15 16:41:04 +00:00
example : "807f1f77bcf81cd799439011"
userId :
2023-05-14 21:47:40 +00:00
type : string
2023-05-15 16:41:04 +00:00
example : "807f1f77bcf81cd799439011"
type :
2023-05-14 21:47:40 +00:00
type : string
2023-05-15 16:41:04 +00:00
enum : [ "successfulPayment" , "declinedPayment" , "timeoutPayment" , "buyCart" , "subsriptionEnd" ]
example : "successfulPayment"
createdAt :
2023-05-14 21:47:40 +00:00
type : string
2023-05-15 16:41:04 +00:00
format : date-time
comment :
2023-05-14 21:47:40 +00:00
type : string
2023-05-15 16:41:04 +00:00
example : "я это сделал потому что 42"
subject :
2023-05-14 21:47:40 +00:00
type : string
2023-05-15 16:41:04 +00:00
description : я пока не могу предположить, какие будут фильтры по истории, поэтому предлагаю в это поле просто класть строку с json. ибо для каждого типа записи она своя.
example : {"tariffs" : [ "807f1f77bcf81cd799439011" , "807f1f77bcf81cd799439011" ] }