Загрузка приложения

IBlogPost

Физическое объявление TypeScript из стартового проекта Nuxt со связанными типами и комментариями к полям.

IBlogPost

Анонс или полная статья блога.

app/interfaces/orionplace/blog/IBlogApi.ts
TypeScript
export 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;
  };
}