Bookcase_BookcaseType
Int | String |
---|---|
0 | BOOKCASE_TYPE_UNKNOWN |
1 | BOOKCASE_TYPE_READ |
2 | BOOKCASE_TYPE_WAIT |
3 | BOOKCASE_TYPE_BUY |
4 | BOOKCASE_TYPE_SALE |
5 | BOOKCASE_TYPE_FREE |
Common_Gender
Int | String |
---|---|
0 | GENDER_UNKNOWN |
1 | GENDER_MALE |
2 | GENDER_FEMALE |
Common_UserClass
Int | String |
---|---|
0 | USERCLASS_UNKNOWN |
1 | USERCLASS_BEGINNER |
2 | USERCLASS_ACTIVIST |
3 | USERCLASS_AUTHORITY |
4 | USERCLASS_PHILOSOPHER |
5 | USERCLASS_MASTER |
6 | USERCLASS_GRANDMASTER |
7 | USERCLASS_PEACEKEEPER |
8 | USERCLASS_PEACEMAKER |
EditionCorrectnessLevel
Int | String |
---|---|
0 | EDITION_CORRECTNESS_LEVEL_UNKNOWN |
1 | EDITION_CORRECTNESS_LEVEL_GREEN |
2 | EDITION_CORRECTNESS_LEVEL_ORANGE |
3 | EDITION_CORRECTNESS_LEVEL_RED |
EditionType
Int | String |
---|---|
0 | EDITION_TYPE_UNKNOWN |
1 | EDITION_TYPE_AUTHOR_BOOK |
2 | EDITION_TYPE_AUTHOR_COMPILATION |
3 | EDITION_TYPE_COMPILATION |
4 | EDITION_TYPE_ANTHOLOGY |
5 | EDITION_TYPE_CHRESTOMATHY |
6 | EDITION_TYPE_MAGAZINE |
7 | EDITION_TYPE_FANZINE |
8 | EDITION_TYPE_ALMANAC |
9 | EDITION_TYPE_NEWSPAPER |
10 | EDITION_TYPE_AUDIOBOOK |
11 | EDITION_TYPE_ILLUSTRATED_ALBUM |
12 | EDITION_TYPE_FILM_STRIP |
FilmType
Int | String |
---|---|
0 | FILM_TYPE_UNKNOWN |
1 | FILM_TYPE_FILM |
2 | FILM_TYPE_SERIES |
3 | FILM_TYPE_EPISODE |
4 | FILM_TYPE_DOCUMENTARY |
5 | FILM_TYPE_ANIMATION |
6 | FILM_TYPE_SHORT |
7 | FILM_TYPE_SPECTACLE |
Forum_Topic_Type
Int | String |
---|---|
0 | UNKNOWN_TYPE |
1 | TOPIC |
2 | POLL |
WorkType
Int | String |
---|---|
0 | WORK_TYPE_UNKNOWN |
1 | WORK_TYPE_NOVEL |
2 | WORK_TYPE_COMPILATION |
3 | WORK_TYPE_SERIES |
4 | WORK_TYPE_VERSE |
5 | WORK_TYPE_OTHER |
6 | WORK_TYPE_FAIRY_TALE |
7 | WORK_TYPE_ESSAY |
8 | WORK_TYPE_ARTICLE |
9 | WORK_TYPE_EPIC_NOVEL |
10 | WORK_TYPE_ANTHOLOGY |
11 | WORK_TYPE_PLAY |
12 | WORK_TYPE_SCREENPLAY |
13 | WORK_TYPE_DOCUMENTARY |
14 | WORK_TYPE_MICROTALE |
15 | WORK_TYPE_DISSERTATION |
16 | WORK_TYPE_MONOGRAPH |
17 | WORK_TYPE_EDUCATIONAL_PUBLICATION |
18 | WORK_TYPE_ENCYCLOPEDIA |
19 | WORK_TYPE_MAGAZINE |
20 | WORK_TYPE_POEM |
21 | WORK_TYPE_POETRY |
22 | WORK_TYPE_PROSE_VERSE |
23 | WORK_TYPE_COMIC_BOOK |
24 | WORK_TYPE_MANGA |
25 | WORK_TYPE_GRAPHIC_NOVEL |
26 | WORK_TYPE_NOVELETTE |
27 | WORK_TYPE_STORY |
28 | WORK_TYPE_FEATURE_ARTICLE |
29 | WORK_TYPE_REPORTAGE |
30 | WORK_TYPE_CONDITIONAL_SERIES |
31 | WORK_TYPE_EXCERPT |
32 | WORK_TYPE_INTERVIEW |
33 | WORK_TYPE_REVIEW |
34 | WORK_TYPE_POPULAR_SCIENCE_BOOK |
35 | WORK_TYPE_ARTBOOK |
36 | WORK_TYPE_LIBRETTO |
Work_PublishStatus
Int | String |
---|---|
0 | PUBLISH_STATUS_UNKNOWN |
1 | PUBLISH_STATUS_NOT_FINISHED |
2 | PUBLISH_STATUS_NOT_PUBLISHED |
3 | PUBLISH_STATUS_NETWORK_PUBLICATION |
4 | PUBLISH_STATUS_AVAILABLE_ONLINE |
5 | PUBLISH_STATUS_PLANNED_BY_THE_AUTHOR |
Логин
Создаёт новый аутентификационный токен для пользователя на основе пары логин/пароль
POST /v1/auth/login
Параметры запроса:
-
login (form, string) - логин или почта пользователя
-
password (form, string) - пароль
Схема ответа:
{
userId: uint64 # id пользователя
token: string # токен -> X-Session
refreshToken: string # токен для продления сессии
}
Классификация произведения
GET /v1/work/{id}/classification
Параметры запроса:
- id (path, uint64) - айди произведения
Схема ответа:
{
groups: [{ # группы жанров
id: uint64 # id группы жанров
name: string # название
genres: [{ # жанры
id: uint64 # id жанра
name: string # название
info: string # информация
subgenres: [...] # поджанры
workCount: uint64 # количество произведений (опционально)
voteCount: uint64 # количество голосов (опционально)
}]
}]
classificationCount: uint64 # сколько раз пользователи классифицировали произведение
}
Иерархия произведений, входящих в запрашиваемое
Параметры запроса:
-
id (path, uint64) - айди произведения
-
depth (query, uint8) - глубина дерева (1 - 5, по умолчанию - 4)
Схема ответа:
{
workId: uint64 # айди произведения, для которого был запрос
subworks: [{ # произведения, входящие в запрашиваемое
id: uint64 # идентификатор произведения
origName: string # оригинальное название
rusName: string # название на русском
year: uint64 # год публикации
workType: enum (WorkType) # тип произведения
rating: float64 # рейтинг
marks: uint64 # кол-во оценок
reviews: uint64 # кол-во отзывов
plus: bool # является ли произведение дополнительным
publishStatus: [enum (Work_PublishStatus)] # статус публикации (не закончено, в планах, etc.)
subworks: [...] # дочерние произведения
}]
}
Список форумов
GET /v1/forums
Схема ответа:
{
forumBlocks: [{ # список блоков форумов
id: uint64 # id блока форумов
title: string # название
forums: [{ # форумы
id: uint64 # id форума
title: string # название
forumDescription: string # описание
moderators: [{ # модераторы
id: uint64 # id пользователя
login: string # логин
name: string # имя
gender: enum (Common_Gender) # пол
avatar: string # аватар
class: enum (Common_UserClass) # класс
sign: string # подпись на форуме
}]
stats: { # статистика
topicCount: uint64 # количество тем
notModeratedTopicCount: uint64 # количество неотмодерированных тем (для модераторов)
messageCount: uint64 # количество сообщений
notReadMessageCount: uint64 # количество непрочитанных сообщений (для залогиненных пользователей)
}
lastMessage: { # последнее сообщение
id: uint64 # id сообщения
topic: { # тема, в которую входит сообщение
id: uint64 # id темы
title: string # название
}
user: { # автор
id: uint64 # id пользователя
login: string # логин
name: string # имя
gender: enum (Common_Gender) # пол
avatar: string # аватар
class: enum (Common_UserClass) # класс
sign: string # подпись на форуме
}
text: string # текст
date: timestamp # дата и время создания
}
}]
}]
}
Список тем форума
GET /v1/forums/{id}
Параметры запроса:
-
id (path, uint64) - id форума
-
page (query, uint64) - номер страницы (по умолчанию - 1)
-
limit (query, uint64) - кол-во записей на странице (по умолчанию - 20)
Схема ответа:
{
moderators: [{ # модераторы
id: uint64 # id пользователя
login: string # логин
name: string # имя
gender: enum (Common_Gender) # пол
avatar: string # аватар
class: enum (Common_UserClass) # класс
sign: string # подпись на форуме
}]
topics: [{ # список тем
id: uint64 # id темы
title: string # название
topicType: enum (Forum_Topic_Type) # тип
creation: { # данные о создании
user: { # пользователь
id: uint64 # id пользователя
login: string # логин
name: string # имя
gender: enum (Common_Gender) # пол
avatar: string # аватар
class: enum (Common_UserClass) # класс
sign: string # подпись на форуме
}
date: timestamp # дата создания
}
isClosed: bool # тема закрыта?
isPinned: bool # тема закреплена?
isNotModerated: bool # тема не отмодерирована? (для модераторов и авторов тем)
isSubscribed: bool # пользователь подписан на тему? (для залогиненных пользователей)
stats: { # статистика
messageCount: uint64 # количество сообщений
notReadMessageCount: uint64 # количество непрочитанных сообщений (для залогиненных пользователей)
viewCount: uint64 # количество просмотров
}
lastMessage: { # последнее сообщение
id: uint64 # id сообщения
topic: { # тема, в которую входит сообщение
id: uint64 # id темы
title: string # название
}
user: { # автор
id: uint64 # id пользователя
login: string # логин
name: string # имя
gender: enum (Common_Gender) # пол
avatar: string # аватар
class: enum (Common_UserClass) # класс
sign: string # подпись на форуме
}
text: string # текст
date: timestamp # дата и время создания
}
firstNotReadMessageId: uint64 # id первого непрочитанного сообщения (для залогиненных пользователей)
}]
pages: { # страницы
current: uint64 # текущая
count: uint64 # количество
}
}
Сообщения в теме форума
GET /v1/topics/{id}
Параметры запроса:
-
id (path, uint64) - id темы
-
page (query, uint64) - номер страницы (по умолчанию - 1)
-
limit (query, uint64) - кол-во записей на странице (по умолчанию - 20)
-
sortAsc (query, uint8) - порядок выдачи (0 - от новых к старым, 1 - наоборот; по умолчанию - 0)
Схема ответа:
{
topic: { # тема
id: uint64 # id темы
title: string # название
topicType: enum (Forum_Topic_Type) # тип
creation: { # данные о создании
user: { # пользователь
id: uint64 # id пользователя
login: string # логин
name: string # имя
gender: enum (Common_Gender) # пол
avatar: string # аватар
class: enum (Common_UserClass) # класс
sign: string # подпись на форуме
}
date: timestamp # дата создания
}
isClosed: bool # тема закрыта?
isPinned: bool # тема закреплена?
isNotModerated: bool # тема не отмодерирована? (для модераторов и авторов тем)
isSubscribed: bool # пользователь подписан на тему? (для залогиненных пользователей)
stats: { # статистика
messageCount: uint64 # количество сообщений
notReadMessageCount: uint64 # количество непрочитанных сообщений (для залогиненных пользователей)
viewCount: uint64 # количество просмотров
}
lastMessage: { # последнее сообщение
id: uint64 # id сообщения
topic: { # тема, в которую входит сообщение
id: uint64 # id темы
title: string # название
}
user: { # автор
id: uint64 # id пользователя
login: string # логин
name: string # имя
gender: enum (Common_Gender) # пол
avatar: string # аватар
class: enum (Common_UserClass) # класс
sign: string # подпись на форуме
}
text: string # текст
date: timestamp # дата и время создания
}
firstNotReadMessageId: uint64 # id первого непрочитанного сообщения (для залогиненных пользователей)
}
forum: { # форум, в который входит тема
id: uint64 # id форума
title: string # название
forumDescription: string # описание
moderators: [{ # модераторы
id: uint64 # id пользователя
login: string # логин
name: string # имя
gender: enum (Common_Gender) # пол
avatar: string # аватар
class: enum (Common_UserClass) # класс
sign: string # подпись на форуме
}]
stats: { # статистика
topicCount: uint64 # количество тем
notModeratedTopicCount: uint64 # количество неотмодерированных тем (для модераторов)
messageCount: uint64 # количество сообщений
notReadMessageCount: uint64 # количество непрочитанных сообщений (для залогиненных пользователей)
}
lastMessage: { # последнее сообщение
id: uint64 # id сообщения
topic: { # тема, в которую входит сообщение
id: uint64 # id темы
title: string # название
}
user: { # автор
id: uint64 # id пользователя
login: string # логин
name: string # имя
gender: enum (Common_Gender) # пол
avatar: string # аватар
class: enum (Common_UserClass) # класс
sign: string # подпись на форуме
}
text: string # текст
date: timestamp # дата и время создания
}
}
poll: { # опрос (если есть)
answerOptions: [{ # варианты ответов
text: string # текст
voterCount: uint64 # количество проголосовавших (если опрос окончен)
}]
voters: [{ # проголосовавшие пользователи (если опрос окончен)
id: uint64 # id пользователя
login: string # логин
name: string # имя
gender: enum (Common_Gender) # пол
avatar: string # аватар
class: enum (Common_UserClass) # класс
sign: string # подпись на форуме
}]
}
pinnedMessage: { # закрепленное сообщение, если есть
id: uint64 # id сообщения
creation: { # данные о создании
user: { # пользователь
id: uint64 # id пользователя
login: string # логин
name: string # имя
gender: enum (Common_Gender) # пол
avatar: string # аватар
class: enum (Common_UserClass) # класс
sign: string # подпись на форуме
}
date: timestamp # дата создания
}
text: string # текст
isCensored: bool # текст изъят модератором?
isUnread: bool # сообщение не прочитано? (для залогиненных пользователей)
attachments: [{ # аттачи
url: string # ссылка на файл
size: uint64 # размер (байт)
}]
stats: { # статистика
rating: int64 # рейтинг
}
rights: { # права
canEdit: bool # на редактирование
canDelete: bool # на удаление
canVoteMinus: bool # на выставление "минуса" сообщению
canVotePlus: bool # на выставление "плюса" сообщению
canDeleteVotes: bool # на удаление рейтинга (для модераторов)
}
}
messages: [{ # сообщения
id: uint64 # id сообщения
creation: { # данные о создании
user: { # пользователь
id: uint64 # id пользователя
login: string # логин
name: string # имя
gender: enum (Common_Gender) # пол
avatar: string # аватар
class: enum (Common_UserClass) # класс
sign: string # подпись на форуме
}
date: timestamp # дата создания
}
text: string # текст
isCensored: bool # текст изъят модератором?
isUnread: bool # сообщение не прочитано? (для залогиненных пользователей)
attachments: [{ # аттачи
url: string # ссылка на файл
size: uint64 # размер (байт)
}]
stats: { # статистика
rating: int64 # рейтинг
}
rights: { # права
canEdit: bool # на редактирование
canDelete: bool # на удаление
canVoteMinus: bool # на выставление "минуса" сообщению
canVotePlus: bool # на выставление "плюса" сообщению
canDeleteVotes: bool # на удаление рейтинга (для модераторов)
}
}]
messageDraft: { # черновик, если есть (для залогиненных пользователей)
topicId: uint64 # id темы
creation: { # данные о создании
user: { # пользователь
id: uint64 # id пользователя
login: string # логин
name: string # имя
gender: enum (Common_Gender) # пол
avatar: string # аватар
class: enum (Common_UserClass) # класс
sign: string # подпись на форуме
}
date: timestamp # дата создания
}
text: string # текст
attachments: [{ # аттачи
url: string # ссылка на файл
size: uint64 # размер (байт)
}]
}
pages: { # страницы
current: uint64 # текущая
count: uint64 # количество
}
}
Список сообществ
GET /v1/communities
Схема ответа:
{
main: [{ # основные рубрики
id: uint64 # id рубрики
title: string # название
communityDescription: string # описание
rules: string # правила
avatar: string # аватар
stats: { # статистика
articleCount: uint64 # количество статей
subscriberCount: uint64 # количество подписчиков
}
lastArticle: { # последняя статья
id: uint64 # id статьи
title: string # название
user: { # автор
id: uint64 # id пользователя
login: string # логин
name: string # имя
gender: enum (Common_Gender) # пол
avatar: string # аватар
class: enum (Common_UserClass) # класс
sign: string # подпись на форуме
}
date: timestamp # дата создания
}
}]
additional: [{ # дополнительные рубрики
id: uint64 # id рубрики
title: string # название
communityDescription: string # описание
rules: string # правила
avatar: string # аватар
stats: { # статистика
articleCount: uint64 # количество статей
subscriberCount: uint64 # количество подписчиков
}
lastArticle: { # последняя статья
id: uint64 # id статьи
title: string # название
user: { # автор
id: uint64 # id пользователя
login: string # логин
name: string # имя
gender: enum (Common_Gender) # пол
avatar: string # аватар
class: enum (Common_UserClass) # класс
sign: string # подпись на форуме
}
date: timestamp # дата создания
}
}]
}
Информация о сообществе
Параметры запроса:
-
id (path, uint64) - айди сообщества
-
page (query, uint64) - номер страницы (по умолчанию - 1)
-
limit (query, uint64) - кол-во записей на странице (по умолчанию - 5)
Схема ответа:
{
community: { # рубрика
id: uint64 # id рубрики
title: string # название
communityDescription: string # описание
rules: string # правила
avatar: string # аватар
stats: { # статистика
articleCount: uint64 # количество статей
subscriberCount: uint64 # количество подписчиков
}
lastArticle: { # последняя статья
id: uint64 # id статьи
title: string # название
user: { # автор
id: uint64 # id пользователя
login: string # логин
name: string # имя
gender: enum (Common_Gender) # пол
avatar: string # аватар
class: enum (Common_UserClass) # класс
sign: string # подпись на форуме
}
date: timestamp # дата создания
}
}
moderators: [{ # модераторы
id: uint64 # id пользователя
login: string # логин
name: string # имя
gender: enum (Common_Gender) # пол
avatar: string # аватар
class: enum (Common_UserClass) # класс
sign: string # подпись на форуме
}]
authors: [{ # авторы
id: uint64 # id пользователя
login: string # логин
name: string # имя
gender: enum (Common_Gender) # пол
avatar: string # аватар
class: enum (Common_UserClass) # класс
sign: string # подпись на форуме
}]
articles: [{ # статьи
id: uint64 # id статьи
title: string # название
creation: { # данные о создании
user: { # пользователь
id: uint64 # id пользователя
login: string # логин
name: string # имя
gender: enum (Common_Gender) # пол
avatar: string # аватар
class: enum (Common_UserClass) # класс
sign: string # подпись на форуме
}
date: timestamp # дата создания
}
text: string # текст
tags: string # теги
attachments: [{ # аттачи
url: string # ссылка на файл
size: uint64 # размер (байт)
}]
stats: { # статистика
likeCount: uint64 # количество лайков
viewCount: uint64 # количество просмотров
commentCount: uint64 # количество комментариев
}
}]
pages: { # страницы
current: uint64 # текущая
count: uint64 # количество
}
}
Список блогов
GET /v1/blogs
Параметры запроса:
-
page (query, uint64) - номер страницы (по умолчанию - 1)
-
limit (query, uint64) - кол-во записей на странице (по умолчанию - 5)
-
sort (query, string) - сортировать по (кол-ву тем в блоге - article, кол-ву подписчиков - subscriber, дате обновления от новых к старым - update (по умолчанию))
Схема ответа:
{
blogs: [{ # блоги
id: uint64 # id блога
user: { # автор
id: uint64 # id пользователя
login: string # логин
name: string # имя
gender: enum (Common_Gender) # пол
avatar: string # аватар
class: enum (Common_UserClass) # класс
sign: string # подпись на форуме
}
isClosed: bool # блог закрыт?
stats: { # статистика
articleCount: uint64 # количество статей
subscriberCount: uint64 # количество подписчиков
}
lastArticle: { # последняя статья
id: uint64 # id статьи
title: string # название
user: { # автор
id: uint64 # id пользователя
login: string # логин
name: string # имя
gender: enum (Common_Gender) # пол
avatar: string # аватар
class: enum (Common_UserClass) # класс
sign: string # подпись на форуме
}
date: timestamp # дата создания
}
}]
pages: { # страницы
current: uint64 # текущая
count: uint64 # количество
}
}
Список статей в блоге
GET /v1/blogs/{id}
Параметры запроса:
-
id (path, uint64) - айди блога
-
page (query, uint64) - номер страницы (по умолчанию - 1)
-
limit (query, uint64) - кол-во записей на странице (по умолчанию - 20)
Схема ответа:
{
articles: [{ # статьи
id: uint64 # id статьи
title: string # название
creation: { # данные о создании
user: { # пользователь
id: uint64 # id пользователя
login: string # логин
name: string # имя
gender: enum (Common_Gender) # пол
avatar: string # аватар
class: enum (Common_UserClass) # класс
sign: string # подпись на форуме
}
date: timestamp # дата создания
}
text: string # текст
tags: string # теги
attachments: [{ # аттачи
url: string # ссылка на файл
size: uint64 # размер (байт)
}]
stats: { # статистика
likeCount: uint64 # количество лайков
viewCount: uint64 # количество просмотров
commentCount: uint64 # количество комментариев
}
}]
pages: { # страницы
current: uint64 # текущая
count: uint64 # количество
}
}
Статья в блоге
Параметры запроса:
- id (path, uint64) - айди статьи
Схема ответа:
{
article: { # статья
id: uint64 # id статьи
title: string # название
creation: { # данные о создании
user: { # пользователь
id: uint64 # id пользователя
login: string # логин
name: string # имя
gender: enum (Common_Gender) # пол
avatar: string # аватар
class: enum (Common_UserClass) # класс
sign: string # подпись на форуме
}
date: timestamp # дата создания
}
text: string # текст
tags: string # теги
attachments: [{ # аттачи
url: string # ссылка на файл
size: uint64 # размер (байт)
}]
stats: { # статистика
likeCount: uint64 # количество лайков
viewCount: uint64 # количество просмотров
commentCount: uint64 # количество комментариев
}
}
}
Список жанров
GET /v1/allgenres
Схема ответа:
{
groups: [{ # группы жанров
id: uint64 # id группы жанров
name: string # название
genres: [{ # жанры
id: uint64 # id жанра
name: string # название
info: string # информация
subgenres: [...] # поджанры
workCount: uint64 # количество произведений (опционально)
voteCount: uint64 # количество голосов (опционально)
}]
}]
}
Комментарии к статье в блоге
GET /v1/blog_articles/{id}/comments
Параметры запроса:
-
id (path, uint64) - id статьи
-
after (query, string) - дата, после которой искать сообщения (в формате RFC3339)
-
count (query, uint64) - кол-во комментариев верхнего уровня (по умолчанию - 10, [5, 20])
-
sortAsc (query, uint8) - порядок выдачи (0 - от новых к старым, 1 - наоборот; по умолчанию - 0)
Схема ответа:
{
comments: [{ # список комментариев
id: uint64 # id сообщения
creation: { # данные о создании
user: { # пользователь
id: uint64 # id пользователя
login: string # логин
name: string # имя
gender: enum (Common_Gender) # пол
avatar: string # аватар
class: enum (Common_UserClass) # класс
sign: string # подпись на форуме
}
date: timestamp # дата создания
}
text: string # текст сообщения
isCensored: bool # текст изъят модератором?
answers: [...] # ответы на комментарий
}]
totalCount: uint64 # общее ко-во комментариев у поста
}
Список книжных полок пользователя
Параметры запроса:
- id (path, uint64) - id пользователя
Схема ответа:
{
bookcaseBlocks: [{ # список блоков книжных полок
title: string # название блока
bookcases: [{ # книжные полки
id: uint64 # id книжной полки
isPrivate: bool # приватная?
type: enum (Bookcase_BookcaseType) # тип
title: string # название
comment: string # комментарий
index: uint64 # порядковый номер
itemCount: uint64 # количество элементов
}]
}]
}
Содержимое полки с изданиями
GET /v1/edition_bookcases/{id}
Параметры запроса:
-
id (path, uint64) - id книжной полки
-
page (query, uint64) - номер страницы (>0, по умолчанию - 1)
-
limit (query, uint64) - кол-во элементов на странице ([5..50], по умолчанию - 50)
-
sort (query, string) - сортировать по: порядку - order (по умолчанию, если иное не задано в настройках полки), автору - author, названию - title, году - year
Схема ответа:
{
bookcase: { # информация о полке
id: uint64 # id книжной полки
isPrivate: bool # приватная?
type: enum (Bookcase_BookcaseType) # тип
title: string # название
comment: string # комментарий
}
editions: [{ # список изданий на полке
itemId: uint64 # id item-а на полке
id: uint64 # id издания
type: enum (EditionType) # тип (авторская книга/сборник/etc; может отсутствовать, если не задан)
correctnessLevel: enum (EditionCorrectnessLevel) # уровень проверенности
cover: string # URL обложки
authors: string # авторы
title: string # название
year: uint64 # год публикации
publishers: string # издательства
description: string # описание
plannedPublicationDate: string # планируемая дата издания (если издание еще не опубликовано)
offers: { # предложения в магазинах
ozon: { # предложение на Озоне
url: string # URL предложения
price: uint64 # цена
}
labirint: { # предложение на Лабиринте
url: string # URL предложения
price: uint64 # цена
}
}
comment: string # комментарий
}]
pages: { # страницы
current: uint64 # текущая
count: uint64 # количество
}
}
Содержимое полки с произведениями
Параметры запроса:
-
id (path, uint64) - id книжной полки
-
page (query, uint64) - номер страницы (>0, по умолчанию - 1)
-
limit (query, uint64) - кол-во элементов на странице ([5..50], по умолчанию - 50)
-
sort (query, string) - сортировать по: порядку - order (по умолчанию, если иное не задано в настройках полки), автору - author, названию - title, оригинальному названию - orig_title, году - year, количеству оценок - mark_count, средней оценке - avg_mark
Схема ответа:
{
bookcase: { # информация о полке
id: uint64 # id книжной полки
isPrivate: bool # приватная?
type: enum (Bookcase_BookcaseType) # тип
title: string # название
comment: string # комментарий
}
works: [{ # список произведений на полке
itemId: uint64 # id item-а на полке
id: uint64 # id произведения
type: enum (WorkType) # тип (роман/сборник/etc; может отсутствовать)
authors: [{ # авторы
id: uint64 # id автора
name: string # имя на русском языке
isOpened: bool # страница открыта?
}]
title: string # название на русском языке
originalTitle: string # название в оригинале
alternativeTitles: string # альтернативные названия
note: string # примечание
year: int64 # год
description: string # описание
isPublished: bool # опубликовано?
stats: { # статистика
averageMark: float64 # средняя оценка
markCount: uint64 # количество оценок
responseCount: uint64 # количество отзывов
}
own: { # персональное
mark: uint64 # собственная оценка произведению
isResponsePublished: bool # опубликован отзыв?
}
comment: string # комментарий
}]
pages: { # страницы
current: uint64 # текущая
count: uint64 # количество
}
}
Содержимое полки с фильмами
Параметры запроса:
-
id (path, uint64) - id книжной полки
-
page (query, uint64) - номер страницы (>0, по умолчанию - 1)
-
limit (query, uint64) - кол-во элементов на странице ([5..50], по умолчанию - 50)
-
sort (query, string) - сортировать по: порядку - order (по умолчанию, если иное не задано в настройках полки), названию - title, оригинальному названию - orig_title
Схема ответа:
{
bookcase: { # информация о полке
id: uint64 # id книжной полки
isPrivate: bool # приватная?
type: enum (Bookcase_BookcaseType) # тип
title: string # название
comment: string # комментарий
}
films: [{ # список фильмов на полке
itemId: uint64 # id item-а на полке
id: uint64 # id фильма
type: enum (FilmType) # тип (фильм/сериал/etc; может отсутствовать, если не задан)
poster: string # URL постера
title: string # название на русском языке
originalTitle: string # название в оригинале
year: uint64 # год выпуска (для всего, кроме сериалов)
startYear: uint64 # год старта трансляции (для сериалов)
endYear: uint64 # год окончания трансляции (для сериалов)
countries: string # страны производства
genres: string # жанры
directors: string # режиссеры
screenWriters: string # сценаристы
actors: string # актеры
description: string # описание
comment: string # комментарий
}]
pages: { # страницы
current: uint64 # текущая
count: uint64 # количество
}
}
Продление сессии
Продлевает сессию с помощью рефреш-токена
POST /v1/auth/refresh
Параметры запроса:
- refresh_token (form, string) - рефреш-токен, выданный при логине или предыдущем продлении сессии
Схема ответа:
{
userId: uint64 # id пользователя
token: string # токен -> X-Session
refreshToken: string # токен для продления сессии
}
Создание нового сообщения в личной переписке
POST /v1/users/{id}/private_message
Параметры запроса:
-
id (path, uint64) - id пользователя, которому отправляется сообщение
-
message (form, string) - текст сообщения
-
send_copy_via_email (form, bool) - отправить копию посредством Email?
Схема ответа:
{
message: { # сообщение
id: uint64 # id сообщения
creation: { # данные о создании
user: { # пользователь
id: uint64 # id пользователя
login: string # логин
name: string # имя
gender: enum (Common_Gender) # пол
avatar: string # аватар
class: enum (Common_UserClass) # класс
sign: string # подпись на форуме
}
date: timestamp # дата создания
}
text: string # текст
number: uint64 # номер сообщения
isRead: bool # прочитано?
}
}
Классификация произведения пользователем
GET /v1/work/{id}/userclassification
Параметры запроса:
- id (path, uint64) - айди произведения
Схема ответа:
{
groups: [{ # группы жанров
id: uint64 # id группы жанров
name: string # название
genres: [{ # жанры
id: uint64 # id жанра
name: string # название
info: string # информация
subgenres: [...] # поджанры
workCount: uint64 # количество произведений (опционально)
voteCount: uint64 # количество голосов (опционально)
}]
}]
}
Выставление оценки произведению
POST /v1/work/{id}/mark
Параметры запроса:
-
id (path, uint64) - id произведения
-
mark (form, uint8) - оценка (1-10, 0 - удалить)
Схема ответа:
{
averageMark: float64 # средняя оценка произведения (-1, если произведение участвует в Фантлабораторной работе)
markCount: int64 # количество оценок (-1, если произведение участвует в Фантлабораторной работе)
}
Создание отзыва на произведение
Параметры запроса:
-
id (path, uint64) - id произведения
-
response (form, string) - текст отзыва
Схема ответа:
{}
Редактирование отзыва на произведение
Параметры запроса:
-
id (path, uint64) - id отзыва
-
response (form, string) - новый текст отзыва
Схема ответа:
{}
Плюс/минус отзыву на произведение
Параметры запроса:
-
id (path, uint64) - id отзыва
-
vote_plus (form, bool) - голос (true - плюс, false - минус)
Схема ответа:
{
rating: int64 # рейтинг отзыва
}
Удаление отзыва на произведение
DELETE /v1/response/{id}
Параметры запроса:
- id (path, uint64) - id отзыва
Схема ответа:
{}
Создание нового сообщения в форуме
Параметры запроса:
-
id (path, uint64) - id темы
-
message (form, string) - текст сообщения
Схема ответа:
{
message: { # сообщение
id: uint64 # id сообщения
creation: { # данные о создании
user: { # пользователь
id: uint64 # id пользователя
login: string # логин
name: string # имя
gender: enum (Common_Gender) # пол
avatar: string # аватар
class: enum (Common_UserClass) # класс
sign: string # подпись на форуме
}
date: timestamp # дата создания
}
text: string # текст
isCensored: bool # текст изъят модератором?
isUnread: bool # сообщение не прочитано? (для залогиненных пользователей)
attachments: [{ # аттачи
url: string # ссылка на файл
size: uint64 # размер (байт)
}]
stats: { # статистика
rating: int64 # рейтинг
}
rights: { # права
canEdit: bool # на редактирование
canDelete: bool # на удаление
canVoteMinus: bool # на выставление "минуса" сообщению
canVotePlus: bool # на выставление "плюса" сообщению
canDeleteVotes: bool # на удаление рейтинга (для модераторов)
}
}
}
Редактирование сообщения в форуме
Параметры запроса:
-
id (path, uint64) - id сообщения
-
message (form, string) - новый текст сообщения
Схема ответа:
{
message: { # сообщение
id: uint64 # id сообщения
creation: { # данные о создании
user: { # пользователь
id: uint64 # id пользователя
login: string # логин
name: string # имя
gender: enum (Common_Gender) # пол
avatar: string # аватар
class: enum (Common_UserClass) # класс
sign: string # подпись на форуме
}
date: timestamp # дата создания
}
text: string # текст
isCensored: bool # текст изъят модератором?
isUnread: bool # сообщение не прочитано? (для залогиненных пользователей)
attachments: [{ # аттачи
url: string # ссылка на файл
size: uint64 # размер (байт)
}]
stats: { # статистика
rating: int64 # рейтинг
}
rights: { # права
canEdit: bool # на редактирование
canDelete: bool # на удаление
canVoteMinus: bool # на выставление "минуса" сообщению
canVotePlus: bool # на выставление "плюса" сообщению
canDeleteVotes: bool # на удаление рейтинга (для модераторов)
}
}
}
Удаление сообщения в форуме
DELETE /v1/forum_messages/{id}
Параметры запроса:
- id (path, uint64) - id сообщения
Схема ответа:
{}
Получение URL для загрузки аттача к сообщению в форуме
GET /v1/forum_messages/{id}/file_upload_url
Параметры запроса:
-
id (path, uint64) - id сообщения
-
file_name (query, string) - полное имя файла (с расширением)
Схема ответа:
{
url: string # URL на загрузку файла
}
Удаление аттача сообщения в форуме
DELETE /v1/forum_messages/{id}/file
Параметры запроса:
-
id (path, uint64) - id сообщения
-
file_name (form, string) - полное имя файла (с расширением)
Схема ответа:
{
message: { # сообщение
id: uint64 # id сообщения
creation: { # данные о создании
user: { # пользователь
id: uint64 # id пользователя
login: string # логин
name: string # имя
gender: enum (Common_Gender) # пол
avatar: string # аватар
class: enum (Common_UserClass) # класс
sign: string # подпись на форуме
}
date: timestamp # дата создания
}
text: string # текст
isCensored: bool # текст изъят модератором?
isUnread: bool # сообщение не прочитано? (для залогиненных пользователей)
attachments: [{ # аттачи
url: string # ссылка на файл
size: uint64 # размер (байт)
}]
stats: { # статистика
rating: int64 # рейтинг
}
rights: { # права
canEdit: bool # на редактирование
canDelete: bool # на удаление
canVoteMinus: bool # на выставление "минуса" сообщению
canVotePlus: bool # на выставление "плюса" сообщению
canDeleteVotes: bool # на удаление рейтинга (для модераторов)
}
}
}
Удаление оценок у сообщения в форуме (для модераторов)
DELETE /v1/forum_messages/{id}/voting
Параметры запроса:
- id (path, uint64) - id сообщения
Схема ответа:
{}
Сохранение черновика сообщения в форуме
PUT /v1/topics/{id}/message_draft
Параметры запроса:
-
id (path, uint64) - id темы
-
message (form, string) - текст сообщения
Схема ответа:
{
messageDraft: { # черновик сообщения
topicId: uint64 # id темы
creation: { # данные о создании
user: { # пользователь
id: uint64 # id пользователя
login: string # логин
name: string # имя
gender: enum (Common_Gender) # пол
avatar: string # аватар
class: enum (Common_UserClass) # класс
sign: string # подпись на форуме
}
date: timestamp # дата создания
}
text: string # текст
attachments: [{ # аттачи
url: string # ссылка на файл
size: uint64 # размер (байт)
}]
}
}
Подтверждение черновика сообщения в форуме
POST /v1/topics/{id}/message_draft
Параметры запроса:
- id (path, uint64) - id темы
Схема ответа:
{
message: { # сообщение
id: uint64 # id сообщения
creation: { # данные о создании
user: { # пользователь
id: uint64 # id пользователя
login: string # логин
name: string # имя
gender: enum (Common_Gender) # пол
avatar: string # аватар
class: enum (Common_UserClass) # класс
sign: string # подпись на форуме
}
date: timestamp # дата создания
}
text: string # текст
isCensored: bool # текст изъят модератором?
isUnread: bool # сообщение не прочитано? (для залогиненных пользователей)
attachments: [{ # аттачи
url: string # ссылка на файл
size: uint64 # размер (байт)
}]
stats: { # статистика
rating: int64 # рейтинг
}
rights: { # права
canEdit: bool # на редактирование
canDelete: bool # на удаление
canVoteMinus: bool # на выставление "минуса" сообщению
canVotePlus: bool # на выставление "плюса" сообщению
canDeleteVotes: bool # на удаление рейтинга (для модераторов)
}
}
}
Отмена черновика сообщения в форуме
DELETE /v1/topics/{id}/message_draft
Параметры запроса:
- id (path, uint64) - id темы
Схема ответа:
{}
Получение URL для загрузки аттача к черновику сообщения в форуме
GET /v1/topics/{id}/message_draft/file_upload_url
Параметры запроса:
-
id (path, uint64) - id темы
-
file_name (query, string) - полное имя файла (с расширением)
Схема ответа:
{
url: string # URL на загрузку файла
}
Удаление аттача черновика сообщения в форуме
DELETE /v1/topics/{id}/message_draft/file
Параметры запроса:
-
id (path, uint64) - id темы
-
file_name (form, string) - полное имя файла (с расширением)
Схема ответа:
{
messageDraft: { # черновик сообщения
topicId: uint64 # id темы
creation: { # данные о создании
user: { # пользователь
id: uint64 # id пользователя
login: string # логин
name: string # имя
gender: enum (Common_Gender) # пол
avatar: string # аватар
class: enum (Common_UserClass) # класс
sign: string # подпись на форуме
}
date: timestamp # дата создания
}
text: string # текст
attachments: [{ # аттачи
url: string # ссылка на файл
size: uint64 # размер (байт)
}]
}
}
Подписка/отписка от темы форума
PUT /v1/topics/{id}/subscription
Параметры запроса:
-
id (path, uint64) - айди темы
-
subscribe (form, bool) - подписаться - true, отписаться - false
Схема ответа:
{}
Создание нового комментария к статье в блоге
POST /v1/blog_articles/{id}/comment
Параметры запроса:
-
id (path, uint64) - id статьи
-
comment (form, string) - текст комментария (непустой)
-
parent_comment_id (form, uint64) - id родительского комментария (0, если комментарий 1-го уровня вложенности)
Схема ответа:
{
comment: { # комментарий
id: uint64 # id сообщения
creation: { # данные о создании
user: { # пользователь
id: uint64 # id пользователя
login: string # логин
name: string # имя
gender: enum (Common_Gender) # пол
avatar: string # аватар
class: enum (Common_UserClass) # класс
sign: string # подпись на форуме
}
date: timestamp # дата создания
}
text: string # текст сообщения
isCensored: bool # текст изъят модератором?
answers: [...] # ответы на комментарий
}
}
Редактирование комментария к статье в блоге
PUT /v1/blog_article_comments/{id}
Параметры запроса:
-
id (path, uint64) - id комментария
-
comment (form, string) - текст комментария (непустой)
Схема ответа:
{
comment: { # комментарий
id: uint64 # id сообщения
creation: { # данные о создании
user: { # пользователь
id: uint64 # id пользователя
login: string # логин
name: string # имя
gender: enum (Common_Gender) # пол
avatar: string # аватар
class: enum (Common_UserClass) # класс
sign: string # подпись на форуме
}
date: timestamp # дата создания
}
text: string # текст сообщения
isCensored: bool # текст изъят модератором?
answers: [...] # ответы на комментарий
}
}
Удаление комментария к статье в блоге
DELETE /v1/blog_article_comments/{id}
Параметры запроса:
- id (path, uint64) - id комментария
Схема ответа:
{}
Вступление/выход из сообщества
PUT /v1/communities/{id}/subscription
Параметры запроса:
-
id (path, uint64) - айди сообщества
-
subscribe (form, bool) - подписаться - true, отписаться - false
Схема ответа:
{}
Подписка/отписка от блога
PUT /v1/blogs/{id}/subscription
Параметры запроса:
-
id (path, uint64) - айди блога
-
subscribe (form, bool) - подписаться - true, отписаться - false
Схема ответа:
{}
Подписка/отписка от статьи в блоге
PUT /v1/blog_articles/{id}/subscription
Параметры запроса:
-
id (path, uint64) - айди статьи
-
subscribe (form, bool) - подписаться - true, отписаться - false
Схема ответа:
{}
Лайк/дизлайк статьи в блоге
PUT /v1/blog_articles/{id}/like
Параметры запроса:
-
id (path, uint64) - айди статьи
-
like (form, bool) - лайк - true, dislike - false
Схема ответа:
{
likeCount: uint64 # количество лайков
}
Создание первичных книжных полок
Схема ответа:
{
bookcaseBlocks: [{ # список блоков книжных полок
title: string # название блока
bookcases: [{ # книжные полки
id: uint64 # id книжной полки
isPrivate: bool # приватная?
type: enum (Bookcase_BookcaseType) # тип
title: string # название
comment: string # комментарий
index: uint64 # порядковый номер
itemCount: uint64 # количество элементов
}]
}]
}
Создание книжной полки
POST /v1/bookcases
Параметры запроса:
-
title (form, string) - название
-
group (form, string) - группа, в которую входит полка (edition - издания, work - произведения, film - фильмы)
-
type (form, string) - тип полки (sale - на продажу, buy - купить, read - читать, wait - ожидаю, free - прочее)
-
description (form, string) - описание, до 50 символов (иначе будет обрезано), может быть пустым
-
is_private (form, bool) - приватная?
-
items (form, string) - item-ы в формате [{"id1":"comment1"},...,{"idN":"commentN"}], id - это editionId для изданий etc, commentN может быть пустым
Схема ответа:
{
id: uint64 # идентификатор
}
Редактирование книжной полки
Параметры запроса:
-
id (path, uint64) - id полки
-
title (form, string) - название
-
type (form, string) - тип полки (sale - на продажу, buy - купить, read - читать, wait - ожидаю, free - прочее)
-
description (form, string) - описание, до 50 символов (иначе будет обрезано), может быть пустым
-
is_private (form, bool) - приватная?
-
sort (form, string) - сортировка, издания по: порядку - order (по умолчанию), автору - author, названию - title, году - year произведения по: порядку - order (по умолчанию), автору - author, названию - title, оригинальному названию - orig_title, году - year, количеству оценок - mark_count, средней оценке - avg_mark фильмы по: порядку - order (по умолчанию), названию - title, оригинальному названию - orig_title
-
items (form, string) - item-ы в формате [{"id1":"comment1"},...,{"idN":"commentN"}], id - это editionId для изданий etc, commentN может быть пустым
Схема ответа:
{}
Изменение порядка сортировки книжных полок внутри блоков
Параметры запроса:
- order (form, string) - новый порядок сортировки в формате {"bookcaseId1":index1,...,"bookcaseIdN":indexN}, indexN > 0
Схема ответа:
{}
Добавление item-а на книжную полку
Параметры запроса:
-
id (path, uint64) - id полки
-
group (form, string) - группа, в которую входит полка (edition - издания, work - произведения, film - фильмы)
-
item_id (form, uint64) - id item-а, который необходимо добавить на полку (editionId для изданий etc)
Схема ответа:
{}
Редактирование комментария к item-у книжной полки
PUT /v1/bookcase_items/{id}/comment
Параметры запроса:
-
id (path, uint64) - id item-а книжной полки
-
comment (form, string) - текст комментария
Схема ответа:
{
comment: string # текст комментария
}
Удаление item-а с книжной полки
DELETE /v1/bookcase_items/{id}
Параметры запроса:
- id (path, uint64) - id item-а книжной полки
Схема ответа:
{}
Удаление книжной полки
DELETE /v1/bookcases/{id}
Параметры запроса:
- id (path, uint64) - id книжной полки
Схема ответа:
{}
Плюс/минус посту в форуме
PUT /v1/forum_messages/{id}/voting
Параметры запроса:
-
id (path, uint64) - id сообщения
-
vote_plus (form, bool) - голос (true - плюс, false - минус)
Схема ответа:
{}
Классификация произведения пользователем
PUT /v1/work/{id}/userclassification
Параметры запроса:
-
id (path, uint64) - айди произведения
-
genres (form, string) - айди жанров, разделённые запятыми
Схема ответа:
{}