Загрузка приложения
IBlogPost
Физическое объявление TypeScript из стартового проекта Nuxt со связанными типами и комментариями к полям.
IBlogPostАнонс или полная статья блога.
interfaces/orionplace/blog/IBlogApi.tsexport interface IBlogPost extends IBlogPostPreview {
// ID, имя и фамилия автора.
writer: {
// ID публикации для подробного запроса, комментариев и учёта чтения.
id: number;
// Значение поля first_name.
first_name: string;
// Значение поля last_name.
last_name: string;
};
// Значение `EBlogAccessType` в `int` и переведённая подпись `text`.
access_type: {
// Значение поля int.
int: EBlogAccessType;
// Значение поля text.
text: string;
};
// Значение `EBlogPublishingState` и переведённая подпись.
publishing_state: {
// Значение поля int.
int: EBlogPublishingState;
// Значение поля text.
text: string;
};
// Может ли текущий пользователь читать полную статью. Может быть true и в
// списке анонсов.
has_full_access: boolean;
// Включена ли полная статья именно в этот ответ. Требуются запрос по ID и
// полный доступ.
is_full: boolean;
// Расчётное время чтения статьи в минутах.
read_time_min: number;
// ID публичных категорий, непосредственно привязанных к публикации.
category_ids: number[];
// Изображения анонса с ID, URL и порядком показа; записи без URL
// пропускаются.
preview_images: {
// ID публикации для подробного запроса, комментариев и учёта чтения.
id: number;
// Значение поля image_url.
image_url: string;
// Значение поля display_order.
display_order: number;
}[];
// Те же URL изображений анонса простым массивом.
preview_image_urls: string[];
// Сохранённый счётчик одобренных комментариев.
c_comments: number;
// Время создания записи публикации.
date_created: IApiDateTime;
// Время обновления записи публикации.
date_updated: IApiDateTime;
// Переведённые заголовок, slug, HTML анонса и метаданные. `post_view_text`
// включается только в полный ответ; доступ к анонсу его не открывает.
locale: Record<
string,
{
// Необязательное поле post_title; может отсутствовать.
post_title?: string;
// Необязательное поле post_slug; может отсутствовать.
post_slug?: string;
// Необязательное поле post_preview_text; может отсутствовать.
post_preview_text?: string;
// Необязательное поле meta_description; может отсутствовать.
meta_description?: string;
// Необязательное поле meta_keywords; может отсутствовать.
meta_keywords?: string;
// Необязательное поле post_view_text; может отсутствовать.
post_view_text?: string;
}
>;
// ID тарифов при отсутствии полного доступа. Поле пропускается при полном
// доступе; возможность подключения тарифа проверяется отдельно.
premium_tariff_ids?: number[];
// Товары запрошенной по ID публикации, в том числе в ответе только с анонсом.
// В обычном списке поле отсутствует. Используется пользовательская выборка
// видимых товаров.
related_products?: IProduct[];
// Изображения полного ответа с ID, URL, порядком и признаком анонса.
images?: {
// ID публикации для подробного запроса, комментариев и учёта чтения.
id: number;
// Значение поля image_url.
image_url: string;
// Значение поля display_order.
display_order: number;
// Значение поля is_preview.
is_preview: boolean;
}[];
// Видео полного ответа с ID, URL видео и превью, порядком показа.
videos?: {
// ID публикации для подробного запроса, комментариев и учёта чтения.
id: number;
// Значение поля video_url.
video_url: string | null;
// Значение поля preview_url.
preview_url: string | null;
// Значение поля display_order.
display_order: number;
}[];
// Счётчики полного ответа: категории, связанные публикации, товары,
// изображения, видео и комментарии. Счётчик не включает саму коллекцию.
counts?: {
// Значение поля c_categories.
c_categories: number;
// Значение поля c_related_posts.
c_related_posts: number;
// Значение поля c_products.
c_products: number;
// Значение поля c_images.
c_images: number;
// Значение поля c_videos.
c_videos: number;
// Сохранённый счётчик одобренных комментариев.
c_comments: number;
};
}