text: create or replace package pkg_HowTo is
  /* package: pkg_HowTo
    Интерфейсный пакет модуля HowTo.
  */
  
  
  
  /* group: Константы */
  
  /* const: Module_Name
    Название модуля, к которому относится пакет.
  */
  Module_Name constant varchar2(30) := 'HowTo';
  
  
  
  /* group: Типы сообщений */
  
  /* const: Answer_MsgTypeCode
    Код типа сообщения "Ответ".
  */
  Answer_MsgTypeCode constant varchar2(10) := 'ANSWER';
  
  /* const: Question_MsgTypeCode
    Код типа сообщения "Вопрос".
  */
  Question_MsgTypeCode constant varchar2(10) := 'QUESTION';
  
  
  
  
  /* group: Функции */
  
  
  
  /* group: Беседы */
  
  /* pfunc: getSnippetOffset
    Получение координаты снипета по поиску в сообщении.
  
    messageId                   - id сообщения
    searchString                - поисковая строка
  
    ( <body::getSnippetOffset>)
  */
  function getSnippetOffset(
    messageId integer
  , searchString varchar2
  )
  return integer;
  
  /* pfunc: createDiscussion
    Создает беседу.
  
    Параметры:
    questionText                - Текст вопроса
    operatorId                  - Пользователь, создающий запись
  
    Возврат:
    Id созданной беседы.
  
    ( <body::createDiscussion>)
  */
  function createDiscussion(
    questionText	clob
    , operatorId	integer
  )
  return integer;
  
  /* pproc: updateDiscussion
    Добавляет ответ в беседу.
  
    Параметры:
    discussionId                - Id беседы
    answerText                  - Текст ответа
    operatorId                  - Пользователь, обновляющий запись
  
    ( <body::updateDiscussion>)
  */
  procedure updateDiscussion(
    discussionId integer
    , answerText clob
    , operatorId integer
  );
  
  /* pproc: deleteDiscussion
    Удаляет беседу.
    Пользователь может удалить только созданную им беседу, по которой не было
    ответов от других пользователей.
  
    Параметры:
    discussionId                - Id беседы
    operatorId                  - Пользователь, удаляющий беседу
  
    ( <body::deleteDiscussion>)
  */
  procedure deleteDiscussion(
    discussionId integer
    , operatorId integer
  );
  
  /* pfunc: findDiscussion
    Поиск бесед.
  
    Параметры:
    discussionId                - Id беседы
                                  (по умолчанию отсутствует)
    searchString                - Строка поиска
                                  (игнорируется если указан discussionId)
                                  (по умолчанию отсутствует)
    maxRowCount                 - Максимальное количество возвращаемых записей
                                  (игнорируется если указан discussionId)
                                  (по умолчанию без ограничений)
  
    Возврат (курсор):
    discussion_id               - Id беседы
    question_text               - Текст вопроса беседы
    answer_count                - Число ответов на вопрос беседы
                                  (заполняется если не указан discussionId)
    snippet_text                - Отрывок найденного текста
                                  (заполняется если выполнялся поиск по
                                  searchString)
                                  (временно выводим question_text в snippet_text
                                  если не указаны discussionId и searchString
                                  для совместимости со старым вариантом App, не
                                  использующим question_text)
    message_dump                - Сообщение вопроса и ответов в формате JSON
                                  (заполняется только если указан discussionId)
    date_ins                    - Дата создания записи
    operator_id                 - Пользователь, создавший запись.
    operator_name               - Пользователь на языке по умолчанию, создавший
                                  запись
  
    Замечания:
    - при вызове функции должно быть задано значение discussionId либо
      searchString;
  
    ( <body::findDiscussion>)
  */
  function findDiscussion(
    discussionId integer := null
    , searchString varchar2 := null
    , maxRowCount integer := null
  )
  return sys_refcursor;
  
  
  
  /* group: Теги беседы */
  
  /* pproc: createDiscussionTag
    Добавляет тег для беседы.
  
    Параметры:
    discussionId                - Id беседы
    tagText                     - Текст тега
    operatorId                  - Пользователь, создающий запись
  
    ( <body::createDiscussionTag>)
  */
  procedure createDiscussionTag(
    discussionId integer
    , tagText varchar2
    , operatorId integer
  );
  
  /* pproc: clearDiscussionTag
    Удаляет тег у беседы.
  
    Параметры:
    discussionId                - Id беседы
    tagId                       - Id тега
    operatorId                  - Пользователь, удаляющий запись
  
    ( <body::clearDiscussionTag>)
  */
  procedure clearDiscussionTag(
    discussionId integer
    , tagId integer
    , operatorId integer
  );
  
  end pkg_HowTo;
  /
  