generated from PenaSide/GolangTemplate
464 lines
16 KiB
YAML
464 lines
16 KiB
YAML
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
|
||
schema:
|
||
type: string
|
||
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
|
||
schema:
|
||
type: string
|
||
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: не найден такой тариф
|
||
/cart/pay:
|
||
post:
|
||
tags:
|
||
- cart
|
||
summary: оплатить козину
|
||
description: "- очевидно нужен воркер или очередь(место где можно потрогать кафку), которая будет слать запросы в конечные сервисы для добавления привилегий в аккаунт пользователя\n
|
||
- в случае если денег в кошельке достаточно - отправить в воркер или очередь задачи на разослать конкретным сервисам добавление привилегий\n
|
||
- если денег недостаточно, получить ссылку на оплату у сервиса платёжки и вернуть её. в случае оплаты, повторить вызов этого метода\n
|
||
- очистить корзину"
|
||
operationId: payCart
|
||
requestBody:
|
||
content:
|
||
application/json:
|
||
schema:
|
||
type: object
|
||
properties:
|
||
id:
|
||
type: string
|
||
description: айдишник для того, чтобы указать сервису оплаты, какой юзер оплатил
|
||
example: "807f1f77bcf81cd799439011"
|
||
responses:
|
||
'200':
|
||
description: успешная оплата корзины
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/Account'
|
||
'401':
|
||
description: Неавторизован
|
||
/wallet:
|
||
patch:
|
||
tags:
|
||
- wallet
|
||
summary: изменить валюту кошелька
|
||
description: "при запросе:\n
|
||
- отвалидировать, что такая валюта одобрена \n
|
||
- получить данные из сервиса cbrf(выдам задачу на него чуть позднее)\n
|
||
- перевести валюту кошелька в нвоую валюту. кошелёк нарочно целочисленный, чтобы не было претензий к точности с плавающей точкой, поэтому, например долларовый счёт считается в центах"
|
||
operationId: changeCurrency
|
||
requestBody:
|
||
content:
|
||
application/json:
|
||
schema:
|
||
type: object
|
||
properties:
|
||
currency:
|
||
type: string
|
||
example: "USD"
|
||
responses:
|
||
'200':
|
||
description: успешная смена валюты кошелька
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/Account"
|
||
'401':
|
||
description: Неавторизован
|
||
'400':
|
||
description: Такая валюта не одобрена
|
||
put:
|
||
tags:
|
||
- wallet
|
||
summary: зачислить деньги на кошелёк
|
||
description: "прибавляем полученное значение к cash и при необходимости приводим к валюте кошелька"
|
||
operationId: putMoney
|
||
requestBody:
|
||
content:
|
||
application/json:
|
||
schema:
|
||
type: object
|
||
properties:
|
||
cash:
|
||
type: integer
|
||
example: 10000
|
||
currency:
|
||
type: string
|
||
example: "USD"
|
||
id:
|
||
type: string
|
||
example: "807f1f77bcf81cd799439011"
|
||
responses:
|
||
'200':
|
||
description: успешное внесение денег на кошелёк
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/Account"
|
||
'400':
|
||
description: Такая валюта не одобрена
|
||
post:
|
||
tags:
|
||
- wallet
|
||
summary: запрос на получение ссылки на оплату
|
||
description: "- формируем запрос к сервису оплаты, с необходимыми постбэками\n
|
||
- получаем ответ от сервиса оплаты с ссылкой на оплату, которую надо передать пользователю"
|
||
operationId: requestMoney
|
||
requestBody:
|
||
content:
|
||
application/json:
|
||
schema:
|
||
type: object
|
||
properties:
|
||
cash:
|
||
type: integer
|
||
example: 10000
|
||
responses:
|
||
'200':
|
||
description: успешный зпрос денег
|
||
content:
|
||
application/json:
|
||
schema:
|
||
type: object
|
||
properties:
|
||
link:
|
||
type: string
|
||
example: "https://google.ru"
|
||
'500':
|
||
description: сервис оплаты вернул ошибку
|
||
/history:
|
||
get:
|
||
tags:
|
||
- history
|
||
summary: получение лога событий связанных с аккаунтом
|
||
operationId: getHistory
|
||
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: successful operation
|
||
content:
|
||
application/json:
|
||
schema:
|
||
type: object
|
||
properties:
|
||
count:
|
||
type: integer
|
||
example: 11
|
||
items:
|
||
type: array
|
||
items:
|
||
$ref: '#/components/schemas/Record'
|
||
'401':
|
||
description: Неавторизован
|
||
post:
|
||
tags:
|
||
- history
|
||
summary: публикация лога в истории
|
||
operationId: add2history
|
||
requestBody:
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: "#/components/schemas/Record"
|
||
responses:
|
||
'200':
|
||
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
|
||
money:
|
||
type: integer
|
||
format: int64
|
||
description: деньги на счету в копейках. Чтобы при перессчётах не возникало денег изниоткуда. фиксируемся к одной валюте, она будет внутренней, никому её не покажем
|
||
example: 10701
|
||
Cart:
|
||
type: array
|
||
items:
|
||
type: string
|
||
example:
|
||
- "807f1f77bcf81cd799439011"
|
||
- "807f1f77bcf81cd799439011"
|
||
- "807f1f77bcf81cd799439011"
|
||
Record:
|
||
type: object
|
||
properties:
|
||
id:
|
||
type: string
|
||
example: "807f1f77bcf81cd799439011"
|
||
userId:
|
||
type: string
|
||
example: "807f1f77bcf81cd799439011"
|
||
type:
|
||
type: string
|
||
enum: ["successfulPayment", "declinedPayment", "timeoutPayment", "buyCart", "subsriptionEnd"]
|
||
example: "successfulPayment"
|
||
createdAt:
|
||
type: string
|
||
format: date-time
|
||
comment:
|
||
type: string
|
||
example: "я это сделал потому что 42"
|
||
subject:
|
||
type: string
|
||
description: я пока не могу предположить, какие будут фильтры по истории, поэтому предлагаю в это поле просто класть строку с json. ибо для каждого типа записи она своя.
|
||
example: {"tariffs":["807f1f77bcf81cd799439011","807f1f77bcf81cd799439011"]}
|