customer/openapi.yaml

464 lines
16 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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"]}