515 lines
16 KiB
YAML
515 lines
16 KiB
YAML
openapi: 3.0.0
|
||
info:
|
||
title: Codeword Recovery Service API
|
||
version: 1.0.0
|
||
description: API для обработки восстановления паролей для сервиса Codeword.
|
||
|
||
tags:
|
||
- name: recover
|
||
description: Операции связанные с восстановлением пароля
|
||
- name: promocode
|
||
description: Операции связанные с промокодами
|
||
- name: stats
|
||
description: Операции связанные со статистикой
|
||
|
||
paths:
|
||
/liveness:
|
||
get:
|
||
operationId: Liveness
|
||
summary: Роут проверки активности
|
||
tags:
|
||
- recover
|
||
responses:
|
||
'200':
|
||
description: Успех – сервис запущен
|
||
|
||
/readiness:
|
||
get:
|
||
operationId: Readiness
|
||
summary: Роут проверки баз данных
|
||
tags:
|
||
- recover
|
||
responses:
|
||
'200':
|
||
description: Успех — сервис готов и соединение с БД живо
|
||
'503':
|
||
description: Служба недоступна — не удалось выполнить проверку связи с БД
|
||
/recover:
|
||
post:
|
||
operationId: Recovery
|
||
summary: Восстановления пароля
|
||
tags:
|
||
- recover
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/RecoveryReq'
|
||
responses:
|
||
'200':
|
||
description: Запрос на восстановление принят
|
||
'404':
|
||
description: Пользователь не найден по электронной почте
|
||
'500':
|
||
description: Внутренняя ошибка сервера
|
||
|
||
/recover/{sign}:
|
||
get:
|
||
operationId: RecoveryLink
|
||
summary: Обработать ссылку восстановления и обменять ее на токены
|
||
tags:
|
||
- recover
|
||
parameters:
|
||
- in: path
|
||
name: sign
|
||
required: true
|
||
schema:
|
||
type: string
|
||
description: Подпись восстановления как часть URL-адреса восстановления
|
||
responses:
|
||
'200':
|
||
description: Восстановление успешно, информация для обмена токенов возвращена в cookie
|
||
'406':
|
||
description: NotAcceptable - срок действия ссылки для восстановления истек или она недействительна
|
||
'500':
|
||
description: Внутренняя ошибка сервера
|
||
|
||
/promocode/create:
|
||
post:
|
||
operationId: CreatePromoCode
|
||
summary: Создать новый промокод
|
||
tags:
|
||
- promocode
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/PromoCodeReq'
|
||
responses:
|
||
'200':
|
||
description: Новый промокод успешно создан
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/PromoCode'
|
||
'400':
|
||
description: Неверный формат запроса или дублирующийся codeword
|
||
'500':
|
||
description: Внутренняя ошибка сервера
|
||
/promocode/edit:
|
||
put:
|
||
operationId: EditPromoCode
|
||
summary: Обновить существующий промокод
|
||
tags:
|
||
- promocode
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/EditPromoCodeReq'
|
||
responses:
|
||
'200':
|
||
description: Промокод успешно обновлен
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/PromoCode'
|
||
'400':
|
||
description: Неверный формат запроса
|
||
'404':
|
||
description: Промокод не найден
|
||
'500':
|
||
description: Внутренняя ошибка сервера
|
||
|
||
/promocode/getList:
|
||
post:
|
||
operationId: GetList
|
||
summary: Получить список промокодов с пагинацией
|
||
tags:
|
||
- promocode
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/GetPromoCodesListReq'
|
||
responses:
|
||
'200':
|
||
description: Список промокодов и общее количество успешно получены
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/GetPromoCodesListResp'
|
||
'400':
|
||
description: Неверный запрос из-за невалидных данных
|
||
'500':
|
||
description: Внутренняя ошибка сервера
|
||
|
||
/promocode/activate:
|
||
post:
|
||
operationId: Activate
|
||
summary: Активировать промокод
|
||
tags:
|
||
- promocode
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ActivateReq'
|
||
responses:
|
||
'200':
|
||
description: Промокод успешно активирован
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ActivateResp'
|
||
'400':
|
||
description: Невалидный запрос или отсутствует обязательное поле codeword или fastLink
|
||
'404':
|
||
description: Промокод не найден
|
||
'500':
|
||
description: Внутренняя ошибка сервера
|
||
|
||
/promocode/{promocodeID}:
|
||
delete:
|
||
operationId: Delete
|
||
summary: Мягко удалить промокод по его id
|
||
tags:
|
||
- promocode
|
||
parameters:
|
||
- in: path
|
||
name: promocodeID
|
||
required: true
|
||
schema:
|
||
type: string
|
||
description: Id промокода для удаления
|
||
responses:
|
||
'204':
|
||
description: Промокод успешно помечен как удаленный
|
||
'400':
|
||
description: Неверный запрос, отсутствует идентификатор промокода
|
||
'404':
|
||
description: Промокод не найден
|
||
'500':
|
||
description: Внутренняя ошибка сервера
|
||
|
||
/promocode/fastlink:
|
||
post:
|
||
operationId: CreateFastLink
|
||
summary: Создать быструю ссылку для промокода
|
||
tags:
|
||
- promocode
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/CreateFastLinkReq'
|
||
responses:
|
||
'200':
|
||
description: Быстрая ссылка для промокода успешно создана
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/CreateFastLinkResp'
|
||
'400':
|
||
description: Неверный запрос, отсутствует идентификатор промокода
|
||
'404':
|
||
description: Промокод не найден
|
||
'500':
|
||
description: Внутренняя ошибка сервера
|
||
|
||
/promocode/stats:
|
||
post:
|
||
operationId: GetStats
|
||
summary: Получить статистику промокода
|
||
tags:
|
||
- stats
|
||
description: Идентификатор промокода и временной интерфал от до unix
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/PromoCodeStatsReq'
|
||
responses:
|
||
'200':
|
||
description: Статистика промокода успешно получена
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/PromoCodeStatsResp'
|
||
'400':
|
||
description: Неверный запрос
|
||
'500':
|
||
description: Внутренняя ошибка сервера
|
||
|
||
|
||
components:
|
||
schemas:
|
||
RecoveryReq:
|
||
type: object
|
||
required:
|
||
- email
|
||
properties:
|
||
email:
|
||
type: string
|
||
format: email
|
||
description: Электронная почта, на которую нужно отправить инструкции по восстановлению
|
||
redirectionURL:
|
||
type: string
|
||
description: URL-адрес, на который перенаправляется пользователь
|
||
PromoCodeStatsReq:
|
||
type: object
|
||
properties:
|
||
id:
|
||
type: string
|
||
from:
|
||
type: integer
|
||
to:
|
||
type: integer
|
||
required:
|
||
- id
|
||
PromoCodeStatsResp:
|
||
type: object
|
||
properties:
|
||
id:
|
||
type: string
|
||
description: id промокода
|
||
usageCount:
|
||
type: integer
|
||
description: общее количество использований промокода
|
||
example: 18
|
||
usageMap:
|
||
type: object
|
||
description: мапа использования промокода ранжированая по способу
|
||
additionalProperties:
|
||
type: integer
|
||
example:
|
||
"-": 10
|
||
"fastlinkID1": 5
|
||
"fastlinkID2": 3
|
||
|
||
|
||
CreateFastLinkReq:
|
||
type: object
|
||
properties:
|
||
id:
|
||
type: string
|
||
description: ID промокода, для которого нужно создать быструю ссылку
|
||
required:
|
||
- id
|
||
|
||
CreateFastLinkResp:
|
||
type: object
|
||
properties:
|
||
fastlink:
|
||
type: string
|
||
description: Быстрая ссылка для активации промокода
|
||
|
||
ActivateReq:
|
||
type: object
|
||
required:
|
||
- codeword
|
||
properties:
|
||
codeword:
|
||
type: string
|
||
description: Кодовое слово для активации промокода
|
||
fastLink:
|
||
type: string
|
||
description: Быстрая ссылка для активации промокода
|
||
|
||
ActivateResp:
|
||
type: object
|
||
properties:
|
||
greetings:
|
||
type: string
|
||
description: Слово успешной активации промокода
|
||
|
||
GetPromoCodesListReq:
|
||
type: object
|
||
required:
|
||
- page
|
||
- limit
|
||
properties:
|
||
page:
|
||
type: integer
|
||
description: Номер страницы
|
||
limit:
|
||
type: integer
|
||
description: Максимальное количество элементов на странице
|
||
filter:
|
||
$ref: '#/components/schemas/Filter'
|
||
|
||
Filter:
|
||
type: object
|
||
properties:
|
||
text:
|
||
type: string
|
||
description: Текстовый фильтр для поиска промокодов
|
||
active:
|
||
type: boolean
|
||
description: Флаг для фильтрации активных промокодов
|
||
|
||
GetPromoCodesListResp:
|
||
type: object
|
||
properties:
|
||
count:
|
||
type: integer
|
||
description: Общее количество промокодов
|
||
items:
|
||
type: array
|
||
items:
|
||
$ref: '#/components/schemas/PromoCode'
|
||
|
||
PromoCode:
|
||
type: object
|
||
properties:
|
||
id:
|
||
type: string
|
||
description: Идентификатор промокода
|
||
codeword:
|
||
type: string
|
||
description: Кодовое слово для активации промокода
|
||
description:
|
||
type: string
|
||
description: Описание промокода
|
||
greetings:
|
||
type: string
|
||
description: Приветственное сообщение после активации промокода
|
||
dueTo:
|
||
type: integer
|
||
description: Дата истечения действия промокода в формате Unix time
|
||
activationCount:
|
||
type: integer
|
||
description: Количество активаций промокода
|
||
bonus:
|
||
type: object
|
||
description: Бонус, предоставляемый с промокодом
|
||
items:
|
||
$ref: '#/components/schemas/Bonus'
|
||
outdated:
|
||
type: boolean
|
||
description: Флаг
|
||
offLimit:
|
||
type: boolean
|
||
description: Флаг
|
||
delete:
|
||
type: boolean
|
||
description: Флаг
|
||
createdAt:
|
||
type: string
|
||
format: date-time
|
||
description: Дата и время создания промокода
|
||
fastLinks:
|
||
type: array
|
||
items:
|
||
type: string
|
||
description: Список быстрых ссылок для активации промокода
|
||
|
||
EditPromoCodeReq:
|
||
type: object
|
||
properties:
|
||
ID:
|
||
type: string
|
||
description: Идентификатор промокода, который требуется обновить
|
||
Description:
|
||
type: string
|
||
nullable: true
|
||
description: Описание промокода
|
||
Greetings:
|
||
type: string
|
||
nullable: true
|
||
description: Приветственное сообщение после активации промокода
|
||
DueTo:
|
||
type: integer
|
||
nullable: true
|
||
description: Дата окончания промокода в формате Unix time
|
||
ActivationCount:
|
||
type: integer
|
||
nullable: true
|
||
description: Количество активаций промокода
|
||
ActivationLimit:
|
||
type: integer
|
||
description: Лимит, есть или нет если 0 то нет
|
||
Delete:
|
||
type: boolean
|
||
nullable: true
|
||
description: Флаг удаления промокода
|
||
PromoCodeReq:
|
||
type: object
|
||
properties:
|
||
codeword:
|
||
type: string
|
||
description: Кодовое слово для активации промокода
|
||
description:
|
||
type: string
|
||
description: Описание промокода
|
||
greetings:
|
||
type: string
|
||
description: Приветственное сообщение после активации промокода
|
||
dueTo:
|
||
type: integer
|
||
description: Дата истечения действия промокода в формате Unix time
|
||
activationCount:
|
||
type: integer
|
||
description: Количество активаций промокода
|
||
activationLimit:
|
||
type: integer
|
||
description: Лимит, есть или нет если 0 то нет
|
||
bonus:
|
||
type: object
|
||
description: Бонус
|
||
items:
|
||
$ref: '#/components/schemas/Bonus'
|
||
fastLinks:
|
||
type: array
|
||
items:
|
||
type: string
|
||
description: Список быстрых ссылок для активации промокода
|
||
|
||
Bonus:
|
||
type: object
|
||
description: Бонус
|
||
properties:
|
||
privilege:
|
||
$ref: '#/components/schemas/Privilege'
|
||
discount:
|
||
$ref: '#/components/schemas/Discount'
|
||
|
||
Privilege:
|
||
type: object
|
||
description: Привилегия
|
||
properties:
|
||
privilegeID:
|
||
type: string
|
||
description: Идентификатор привилегии
|
||
amount:
|
||
type: integer
|
||
description: Количество привилегии
|
||
serviceKey:
|
||
type: string
|
||
description: Тип сервиса
|
||
|
||
Discount:
|
||
type: object
|
||
description: Скидка
|
||
properties:
|
||
layer:
|
||
type: integer
|
||
description: Уровень скидки
|
||
factor:
|
||
type: integer
|
||
description: Множитель скидки
|
||
target:
|
||
type: string
|
||
description: Цель скидки
|
||
threshold:
|
||
type: integer
|
||
description: Порог скидки
|
||
|