583 lines
19 KiB
YAML
583 lines
19 KiB
YAML
openapi: 3.0.0
|
||
info:
|
||
title: Анонимные опросы API
|
||
description: API для работы с системой анонимных опросов
|
||
version: 1.0.0
|
||
servers:
|
||
- url: /questioneer/api
|
||
description: Базовый URL API
|
||
paths:
|
||
/questionnaires:
|
||
get:
|
||
summary: Получить список опросов пользователя
|
||
description: Возвращает список всех опросов, сохраненных в локальном хранилище браузера
|
||
operationId: getQuestionnaires
|
||
responses:
|
||
'200':
|
||
description: Успешный запрос
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/QuestionnairesResponse'
|
||
post:
|
||
summary: Создать новый опрос
|
||
description: Создает новый опрос с указанными параметрами
|
||
operationId: createQuestionnaire
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/QuestionnaireCreate'
|
||
responses:
|
||
'200':
|
||
description: Опрос успешно создан
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/QuestionnaireResponse'
|
||
/questionnaires/public/{publicLink}:
|
||
get:
|
||
summary: Получить опрос для участия
|
||
description: Возвращает данные опроса по публичной ссылке
|
||
operationId: getPublicQuestionnaire
|
||
parameters:
|
||
- name: publicLink
|
||
in: path
|
||
required: true
|
||
schema:
|
||
type: string
|
||
responses:
|
||
'200':
|
||
description: Успешный запрос
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/QuestionnaireResponse'
|
||
'404':
|
||
description: Опрос не найден
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
/questionnaires/admin/{adminLink}:
|
||
get:
|
||
summary: Получить опрос для редактирования и просмотра результатов
|
||
description: Возвращает данные опроса по административной ссылке
|
||
operationId: getAdminQuestionnaire
|
||
parameters:
|
||
- name: adminLink
|
||
in: path
|
||
required: true
|
||
schema:
|
||
type: string
|
||
responses:
|
||
'200':
|
||
description: Успешный запрос
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/QuestionnaireResponse'
|
||
'404':
|
||
description: Опрос не найден
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
put:
|
||
summary: Обновить опрос
|
||
description: Обновляет существующий опрос
|
||
operationId: updateQuestionnaire
|
||
parameters:
|
||
- name: adminLink
|
||
in: path
|
||
required: true
|
||
schema:
|
||
type: string
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/QuestionnaireUpdate'
|
||
responses:
|
||
'200':
|
||
description: Опрос успешно обновлен
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/QuestionnaireResponse'
|
||
'404':
|
||
description: Опрос не найден
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
delete:
|
||
summary: Удалить опрос
|
||
description: Удаляет опрос вместе со всеми ответами
|
||
operationId: deleteQuestionnaire
|
||
parameters:
|
||
- name: adminLink
|
||
in: path
|
||
required: true
|
||
schema:
|
||
type: string
|
||
responses:
|
||
'200':
|
||
description: Опрос успешно удален
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/SuccessResponse'
|
||
'404':
|
||
description: Опрос не найден
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
/vote/{publicLink}:
|
||
post:
|
||
summary: Отправить ответы на опрос
|
||
description: Отправляет ответы пользователя на опрос
|
||
operationId: submitVote
|
||
parameters:
|
||
- name: publicLink
|
||
in: path
|
||
required: true
|
||
schema:
|
||
type: string
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/VoteRequest'
|
||
responses:
|
||
'200':
|
||
description: Ответы успешно отправлены
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/SuccessResponse'
|
||
'404':
|
||
description: Опрос не найден
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
/results/{publicLink}:
|
||
get:
|
||
summary: Получить результаты опроса
|
||
description: Возвращает текущие результаты опроса
|
||
operationId: getResults
|
||
parameters:
|
||
- name: publicLink
|
||
in: path
|
||
required: true
|
||
schema:
|
||
type: string
|
||
responses:
|
||
'200':
|
||
description: Успешный запрос
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ResultsResponse'
|
||
'404':
|
||
description: Опрос не найден
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
components:
|
||
schemas:
|
||
QuestionnaireCreate:
|
||
type: object
|
||
required:
|
||
- title
|
||
- questions
|
||
properties:
|
||
title:
|
||
type: string
|
||
description: Название опроса
|
||
description:
|
||
type: string
|
||
description: Описание опроса
|
||
questions:
|
||
type: array
|
||
description: Список вопросов
|
||
items:
|
||
$ref: '#/components/schemas/Question'
|
||
displayType:
|
||
type: string
|
||
description: Тип отображения опроса
|
||
enum: [standard, step_by_step]
|
||
default: standard
|
||
QuestionnaireUpdate:
|
||
type: object
|
||
properties:
|
||
title:
|
||
type: string
|
||
description: Название опроса
|
||
description:
|
||
type: string
|
||
description: Описание опроса
|
||
questions:
|
||
type: array
|
||
description: Список вопросов
|
||
items:
|
||
$ref: '#/components/schemas/Question'
|
||
displayType:
|
||
type: string
|
||
description: Тип отображения опроса
|
||
enum: [standard, step_by_step]
|
||
Question:
|
||
type: object
|
||
required:
|
||
- text
|
||
- type
|
||
properties:
|
||
text:
|
||
type: string
|
||
description: Текст вопроса
|
||
type:
|
||
type: string
|
||
description: Тип вопроса
|
||
enum: [single, multiple, text, scale, rating, tagcloud]
|
||
required:
|
||
type: boolean
|
||
description: Является ли вопрос обязательным
|
||
default: false
|
||
options:
|
||
type: array
|
||
description: Варианты ответа (для single, multiple)
|
||
items:
|
||
$ref: '#/components/schemas/Option'
|
||
tags:
|
||
type: array
|
||
description: Список тегов (для tagcloud)
|
||
items:
|
||
$ref: '#/components/schemas/Tag'
|
||
scaleMin:
|
||
type: integer
|
||
description: Минимальное значение шкалы (для scale)
|
||
default: 0
|
||
scaleMax:
|
||
type: integer
|
||
description: Максимальное значение шкалы (для scale)
|
||
default: 10
|
||
scaleMinLabel:
|
||
type: string
|
||
description: Метка для минимального значения шкалы
|
||
default: "Минимум"
|
||
scaleMaxLabel:
|
||
type: string
|
||
description: Метка для максимального значения шкалы
|
||
default: "Максимум"
|
||
Option:
|
||
type: object
|
||
required:
|
||
- text
|
||
properties:
|
||
text:
|
||
type: string
|
||
description: Текст варианта ответа
|
||
votes:
|
||
type: integer
|
||
description: Количество голосов за этот вариант
|
||
default: 0
|
||
Tag:
|
||
type: object
|
||
required:
|
||
- text
|
||
properties:
|
||
text:
|
||
type: string
|
||
description: Текст тега
|
||
count:
|
||
type: integer
|
||
description: Количество выборов данного тега
|
||
default: 0
|
||
VoteRequest:
|
||
type: object
|
||
required:
|
||
- answers
|
||
properties:
|
||
answers:
|
||
type: array
|
||
description: Список ответов пользователя
|
||
items:
|
||
$ref: '#/components/schemas/Answer'
|
||
Answer:
|
||
type: object
|
||
required:
|
||
- questionIndex
|
||
properties:
|
||
questionIndex:
|
||
type: integer
|
||
description: Индекс вопроса
|
||
optionIndices:
|
||
type: array
|
||
description: Индексы выбранных вариантов (для single, multiple)
|
||
items:
|
||
type: integer
|
||
textAnswer:
|
||
type: string
|
||
description: Текстовый ответ пользователя (для text)
|
||
scaleValue:
|
||
type: integer
|
||
description: Значение шкалы (для scale, rating)
|
||
tagTexts:
|
||
type: array
|
||
description: Тексты выбранных или введенных тегов (для tagcloud)
|
||
items:
|
||
type: string
|
||
QuestionnairesResponse:
|
||
type: object
|
||
properties:
|
||
success:
|
||
type: boolean
|
||
description: Успешность запроса
|
||
data:
|
||
type: array
|
||
description: Список опросов
|
||
items:
|
||
$ref: '#/components/schemas/QuestionnaireInfo'
|
||
QuestionnaireResponse:
|
||
type: object
|
||
properties:
|
||
success:
|
||
type: boolean
|
||
description: Успешность запроса
|
||
data:
|
||
$ref: '#/components/schemas/QuestionnaireData'
|
||
QuestionnaireInfo:
|
||
type: object
|
||
properties:
|
||
title:
|
||
type: string
|
||
description: Название опроса
|
||
description:
|
||
type: string
|
||
description: Описание опроса
|
||
adminLink:
|
||
type: string
|
||
description: Административная ссылка
|
||
publicLink:
|
||
type: string
|
||
description: Публичная ссылка
|
||
createdAt:
|
||
type: string
|
||
format: date-time
|
||
description: Дата создания опроса
|
||
updatedAt:
|
||
type: string
|
||
format: date-time
|
||
description: Дата последнего обновления опроса
|
||
QuestionnaireData:
|
||
type: object
|
||
properties:
|
||
_id:
|
||
type: string
|
||
description: Идентификатор опроса
|
||
title:
|
||
type: string
|
||
description: Название опроса
|
||
description:
|
||
type: string
|
||
description: Описание опроса
|
||
questions:
|
||
type: array
|
||
description: Список вопросов
|
||
items:
|
||
$ref: '#/components/schemas/QuestionData'
|
||
displayType:
|
||
type: string
|
||
description: Тип отображения опроса
|
||
enum: [standard, step_by_step]
|
||
adminLink:
|
||
type: string
|
||
description: Административная ссылка
|
||
publicLink:
|
||
type: string
|
||
description: Публичная ссылка
|
||
createdAt:
|
||
type: string
|
||
format: date-time
|
||
description: Дата создания опроса
|
||
updatedAt:
|
||
type: string
|
||
format: date-time
|
||
description: Дата последнего обновления опроса
|
||
QuestionData:
|
||
type: object
|
||
properties:
|
||
_id:
|
||
type: string
|
||
description: Идентификатор вопроса
|
||
text:
|
||
type: string
|
||
description: Текст вопроса
|
||
type:
|
||
type: string
|
||
description: Тип вопроса
|
||
required:
|
||
type: boolean
|
||
description: Является ли вопрос обязательным
|
||
options:
|
||
type: array
|
||
description: Варианты ответа (для single, multiple)
|
||
items:
|
||
$ref: '#/components/schemas/OptionData'
|
||
tags:
|
||
type: array
|
||
description: Список тегов (для tagcloud)
|
||
items:
|
||
$ref: '#/components/schemas/TagData'
|
||
scaleMin:
|
||
type: integer
|
||
description: Минимальное значение шкалы (для scale)
|
||
scaleMax:
|
||
type: integer
|
||
description: Максимальное значение шкалы (для scale)
|
||
scaleMinLabel:
|
||
type: string
|
||
description: Метка для минимального значения шкалы
|
||
scaleMaxLabel:
|
||
type: string
|
||
description: Метка для максимального значения шкалы
|
||
answers:
|
||
type: array
|
||
description: Текстовые ответы (для text)
|
||
items:
|
||
type: string
|
||
scaleValues:
|
||
type: array
|
||
description: Значения шкалы от пользователей (для scale, rating)
|
||
items:
|
||
type: integer
|
||
textAnswers:
|
||
type: array
|
||
description: Текстовые ответы (для text)
|
||
items:
|
||
type: string
|
||
responses:
|
||
type: array
|
||
description: Значения шкалы от пользователей (для scale, rating)
|
||
items:
|
||
type: integer
|
||
OptionData:
|
||
type: object
|
||
properties:
|
||
_id:
|
||
type: string
|
||
description: Идентификатор варианта ответа
|
||
text:
|
||
type: string
|
||
description: Текст варианта ответа
|
||
votes:
|
||
type: integer
|
||
description: Количество голосов за этот вариант
|
||
count:
|
||
type: integer
|
||
description: Альтернативное поле для количества голосов
|
||
TagData:
|
||
type: object
|
||
properties:
|
||
_id:
|
||
type: string
|
||
description: Идентификатор тега
|
||
text:
|
||
type: string
|
||
description: Текст тега
|
||
count:
|
||
type: integer
|
||
description: Количество выборов данного тега
|
||
ResultsResponse:
|
||
type: object
|
||
properties:
|
||
success:
|
||
type: boolean
|
||
description: Успешность запроса
|
||
data:
|
||
$ref: '#/components/schemas/ResultsData'
|
||
ResultsData:
|
||
type: object
|
||
properties:
|
||
questions:
|
||
type: array
|
||
description: Список вопросов с результатами
|
||
items:
|
||
$ref: '#/components/schemas/QuestionResults'
|
||
QuestionResults:
|
||
type: object
|
||
properties:
|
||
text:
|
||
type: string
|
||
description: Текст вопроса
|
||
type:
|
||
type: string
|
||
description: Тип вопроса
|
||
options:
|
||
type: array
|
||
description: Варианты ответа с количеством голосов (для single, multiple)
|
||
items:
|
||
type: object
|
||
properties:
|
||
text:
|
||
type: string
|
||
description: Текст варианта ответа
|
||
count:
|
||
type: integer
|
||
description: Количество голосов
|
||
tags:
|
||
type: array
|
||
description: Список тегов с количеством выборов (для tagcloud)
|
||
items:
|
||
type: object
|
||
properties:
|
||
text:
|
||
type: string
|
||
description: Текст тега
|
||
count:
|
||
type: integer
|
||
description: Количество выборов
|
||
scaleValues:
|
||
type: array
|
||
description: Значения шкалы от пользователей (для scale, rating)
|
||
items:
|
||
type: integer
|
||
scaleAverage:
|
||
type: number
|
||
description: Среднее значение шкалы (для scale, rating)
|
||
answers:
|
||
type: array
|
||
description: Текстовые ответы (для text)
|
||
items:
|
||
type: string
|
||
responses:
|
||
type: array
|
||
description: Значения шкалы от пользователей (для scale, rating)
|
||
items:
|
||
type: integer
|
||
SuccessResponse:
|
||
type: object
|
||
properties:
|
||
success:
|
||
type: boolean
|
||
description: Успешность запроса
|
||
example: true
|
||
message:
|
||
type: string
|
||
description: Сообщение об успешном выполнении
|
||
ErrorResponse:
|
||
type: object
|
||
properties:
|
||
success:
|
||
type: boolean
|
||
description: Успешность запроса
|
||
example: false
|
||
error:
|
||
type: string
|
||
description: Сообщение об ошибке |