Перейти к содержанию

Социальная сеть: бизнес-логика

Обзор

social-network — домен корпоративных публикаций: личная «стена» пользователя, сообщества, подписки и лента чтения. Доступен начиная с версии 2.265 «Цефей».

Содержательно это отдельный UX-контур, но технически он построен на связке:

  • категории/задачи (categories/tasks)
  • комментарии и треды (comments/chat)
  • статья пространства (spaces) как продолжение публикации

Модель данных (предметная)

1. Раздел социальной сети

Раздел задается через socialNetworksSettings.RootCategoryId.

2. Сообщество

Сообщество хранится как задача в служебной категории типа «Группы соц.сетей»:

  • открытые группы → GroupsForPublicationsId
  • закрытые группы → GroupsForClosedPublicationsId

При переключении типа сообщества («Открытое/Закрытое») задача автоматически переносится между этими категориями, а права для группы «Все пользователи» назначаются заново в зависимости от выбранной категории.

3. Личная публикация

Личная активность пользователя хранится в категории PersonalPublicationsSubcatId (через задачу-стену пользователя). Все личные публикации отображаются на вкладке «Публикации» в профиле пользователя.

4. Публикация (пост)

Публикация в ленте — это комментарий/контент в задаче стены или сообщества (feed-контур comments). Пост всегда открывается в режиме просмотра.

5. Статья из публикации

Сценарий «Создать статью» использует ArticlesSubcatId:

  • категория статьи должна быть типа «Пространство»
  • для runtime требуется IsWikiSubcat = 1

Ключевые настройки

Соцсеть работает на JSON-конфигурации socialNetworksSettings (dbo.SettingsCustom):

  • RootCategoryId
  • PersonalPublicationsSubcatId
  • GroupsForPublicationsId
  • GroupsForClosedPublicationsId
  • ArticlesSubcatId
  • ExtParams.ExtParamCoverId
  • HeaderStyle (0 или 1, см. ниже)

Лента подписок

Лента подписок — единый поток публикаций от пользователей и сообществ, на которые подписан текущий пользователь.

Хронология: публикации отображаются в порядке убывания даты создания (новые — сверху).

Доступ к ранее опубликованным постам: - При персональной подписке на пользователя/сообщество — доступны все ранее опубликованные посты, созданные до момента подписки. - При подписке через группу — правило не применяется; доступ только к новым публикациям.

⚠️ Отписка не удаляет ранее увиденные посты из ленты — они остаются.

Навигация: - Нажатие на аватар/имя личной публикации → профиль автора (вкладка «Публикации»). - Нажатие на аватар/название сообщества → карточка представления сообщества.

Создание публикации

Текст и форматирование

Ввод текста — в поле с подсказкой «Создать публикацию». Поддерживается стандартное форматирование текста (как в задачах).

Вложения

Три варианта прикрепления:

Способ Сжатие изображений
Drag-and-drop в поле ввода Да (автоматически)
Кнопка вложения → «Фото или видео» Да
Кнопка вложения → «Файлы» Нет (без сжатия)

Исключение: вариант «Файлы» загружает изображение без компрессии, сохраняя оригинальное качество.

Видеоплеер

Видеофайлы отображаются inline-плеером в превью поста:

  • Пропорция отображения: 1:1 (квадрат).
  • Звук: выключен по умолчанию.
  • Авто-пауза при выходе видео из области просмотра.
  • Неквадратное видео масштабируется с сохранением пропорций, отображается по центру с чёрными полями.
  • Кнопка полноэкранного режима — внутри плеера.

Статья пространства

К публикации можно прикрепить существующую статью через #{Номер_статьи} или создать новую кнопкой «Создать статью».

⚠️ Пункт «Создать статью» доступен только если в socialNetworksSettings указан ArticlesSubcatId.

После публикации: - Статья открывается по кнопке «Читать» в теле поста (модальное окно). - При наличии обложки — её превью отображается в посте. - Кнопка редактирования (при наличии прав) открывает статью в новом окне.

Правила длины поста

Длина текста Поведение
< 200 символов, без вложений и опросов Увеличенный шрифт
200–800 символов Обрезание + кнопка «Показать полностью»
> 800 символов Обрезание (без кнопки раскрытия)

Правила отображения вложений

Количество Поведение
1 вложение Полное отображение (макс. ширина 700px)
2–6 Плитка (grid)
> 6 Плитка + счётчик «+N» на последнем

Нажатие на фото/видео → просмотр.

Опросы

Создание

Опрос создаётся из формы поста (кнопка опроса или через меню вложений → «Создать опрос»).

⚠️ Опросы не создаются в ответах (комментариях) — только в корневом посте.

Параметры опроса:

Параметр Ограничение
Текст вопроса макс. 100 символов
Варианты ответа макс. 100 символов каждый
Количество вариантов ответа от 2, добавляются кнопкой «Добавить ответ»
Опросов на пост ровно 1
Вопросов в опросе ровно 1
Голосов на пользователя ровно 1

Настройки опроса

  • Анонимный опрос — имена и аватары проголосовавших скрыты; отображается только количество голосов и проценты.
  • Выбор нескольких ответов — пользователь может выбрать несколько вариантов одновременно (по умолчанию — только один).

Цветовые темы

10 цветов: красный, розовый, фиолетовый, синий (по умолчанию), голубой, зелёный, жёлтый, оранжевый, коричневый, серый.

Голосование и отмена

  • Публичный опрос показывает вариант, выбранный текущим пользователем, и список проголосовавших.
  • Ссылка «Проголосовали X человек» → модальное окно с вкладками по вариантам ответа и списком пользователей.
  • Опросы работают непрерывно (без ограничения времени).

Отмена голоса: - Одиночный выбор — повторный клик на выбранный вариант. - Множественный выбор — ПКМ → «Отменить свой голос». - Голос можно отменить в любой момент.


Сообщества

Создание сообщества

Форма создания доступна из: 1. Представления категории «Публикации» (кнопка «Создать»). 2. Личного профиля, блок «Подписки» (кнопка создания).

Поле Описание
Название Макс. 128 символов; динамический счётчик обратного отсчёта; при достижении 0 ввод блокируется
Описание Дополнительная информация; отображается в шапке под кнопками управления
Видимость Открытое (доступно всем для поиска и подписки) / Закрытое (только подписчикам)
Подписчики Начальный список пользователей

После создания сообщество появляется в блоке «Подписки» профиля создателя и указанных подписчиков.

⚠️ При смене видимости «Открытое» → «Закрытое» (и обратно) задача автоматически переносится между категориями GroupsForPublicationsId и GroupsForClosedPublicationsId. Права для группы «Все пользователи» назначаются автоматически в зависимости от выбранной категории.

Доступ к сообществу

Определяется настройкой «Создавать публикации» (см. Разрешения):

  • Настройка активна → доступ к публикациям по роли.
  • Настройка отключена → отображаются только сообщества, где пользователь назначен владельцем, администратором, модератором или автором.

По умолчанию группы соц.сетей не отображаются в разделе избранного «Мои задачи».

Страница сообщества

В верхней части страницы — шапка с основной информацией: аватар и название сообщества, строкой ниже — статус (открытое или закрытое) и номер группы. Ниже шапки отображается описание сообщества (если заполнено).

Под шапкой — кнопки управления: подписаться/отписаться, добавить подписчиков, включить/отключить уведомления, собрать видеоконференцию, меню дополнительных действий (переход к настройкам, копирование ссылки, удаление сообщества).

Ниже поля ввода публикации — блоки боковой панели: - Подписчики — список подписчиков (видимость определяется настройкой «Скрыть список подписчиков»). Нажатие на пользователя открывает его профиль на вкладке «Публикации». - Файлы — вложения из постов и комментариев сообщества.

Блок «Администраторы и модераторы»

Отдельный блок на странице сообщества, отображающий всех пользователей с привилегированными ролями: Владелец, Администратор, Модератор, Автор — именно в этом порядке.

Особенности: - Виден всем участникам группы независимо от настройки «Скрыть список подписчиков». - Нажатие на заголовок блока открывает модальное окно со списком подписчиков для назначения ролей. - В модальном окне можно выбрать нескольких пользователей, указать роль справа и нажать «Добавить». - Администратор может менять роль любого участника из этого списка прямо из блока (наведение → кнопка). - При наведении на роль — всплывающая подсказка с описанием прав.


Настройки группы

Экран настроек открывается через меню действий (кнопка «...» → «Редактировать»). Настройки в модальных окнах сохраняются независимо от основного экрана.

Параметры (10)

Параметр Описание
Аватар Загружается через клик на текущий аватар → «Загрузить изображение». Также доступно на странице публикации
Название Макс. 128 символов, динамический счётчик
Описание Текст, отображаемый в шапке группы
Видимость Открытое / Закрытое (см. Сообщества)
Правила Ссылка на статью пространства; после сохранения — кликабельная ссылка в шапке сообщества
Подписчики Управление списком и ролями (см. Роли)
Обложка Изображение 1300×340 px, JPG/PNG, пропорция обрезки 22:6, маска-подсветка области
Реакции Включение/отключение реакций. ⚠️ Недоступно, если в категории отключены реакции на сообщения
Создавать обсуждения Если выключено — комментарии отключены для всех, кроме владельца и администраторов
Отправка файлов / Аудиосообщения / Создавать опросы Три отдельных переключателя; при отключении соответствующая кнопка скрывается из поля ввода

Обложка сообщества

  • Формат: JPG/PNG, разрешение 1300×340 px.
  • Пропорция обрезки: 22:6 (фиксированная, с полупрозрачной маской).
  • Доступна смена/удаление через кнопку «Изменить обложку» (при наведении, только для владельца/администратора/модератора).

Разрешения для подписчиков

Шесть флагов, настраиваются в модальном окне «Разрешения для участников»:

Разрешение По умолчанию Описание
Скрыть список подписчиков ✅ Включено Только администраторы видят список подписчиков
Добавлять других подписчиков ✅ Включено Любой подписчик может приглашать новых; при отключении — только администратор
Создавать публикации ❌ Отключено Если активно — подписчики могут публиковать; если нет — только администраторы и модераторы. Определяет доступ к сообществу в целом
Разрешить анонимные публикации Публикация от имени группы без указания авторства. ⚠️ Анонимную запись невозможно изменить или удалить
Закреплять публикации для всех ❌ Отключено Участники могут закреплять свои и чужие посты. Администратор — всегда может
Звонки ❌ Отключено Подписчики видят кнопку «Собрать видеоконференцию»; неподписанные — только «Присоединиться»

Роли

Каждое сообщество состоит из участников с разными уровнями прав. Права переходят заместителю от принципала в период замещения.

Роль Кто назначает Ключевые права Ограничения
Владелец Создатель (автоматически) Полное управление: назначение администраторов/модераторов, публикация, управление подписчиками, редактирование настроек, удаление чужих постов и комментариев Роль неизменяема: нельзя удалить, передать, отредактировать. Не может быть удалён администраторами
Администратор Владелец или другой администратор Те же права что у владельца: назначение администраторов/модераторов, публикация, управление подписчиками, редактирование настроек, удаление чужих постов и комментариев Может самостоятельно снять с себя роль. Не может удалить владельца
Модератор Владелец или администратор Публикация, добавление подписчиков, редактирование настроек, удаление чужих постов и комментариев Не управляет ролями. Не может самостоятельно снять с себя роль
Автор Владелец, администратор или модератор Только создание и публикация постов Нет прав на управление участниками или настройками. Не может удалять других, назначать/снимать роли
Подписчики Могут публиковать, если активно «Создавать публикации» (см. Разрешения) Могут удалять и редактировать только свои посты

HeaderStyle

Два варианта оформления шапки поста в группах. Задаётся через socialNetworksSettings.HeaderStyle.

Значение Аватар в шапке Автор Поведение
0 (по умолчанию) Аватар группы Указывается после контента поста
1 Два аватара: крупный = автор, мелкий = группа (поверх) Имя автора кликабельное → мини-карточка; название группы — второй строкой перед датой Для репостов шапка всегда показывает только репостящего, независимо от HeaderStyle

Действия с публикацией

По кнопке «...» у поста раскрывается контекстное меню:

Пункт Кому доступно
Редактировать Автор поста. Прикреплённый опрос в режиме редактирования недоступен для изменения
Скопировать ссылку Всем — копирует прямую ссылку на пост в буфер обмена
Закрепить / Открепить Владелец, администратор, модератор; подписчик — если разрешено настройкой «Закреплять публикации для всех»
Удалить публикацию Автор поста (только своё). Владелец, администратор, модератор — любой пост

Репосты

Репост выполняется по кнопке репоста. Модальное окно предлагает 3 варианта:

Вариант Цель
На своей стене Личные публикации в профиле
В сообществе Выбор из сообществ, где есть права на публикацию
В чате Выбор группового или личного чата

Проверка прав: система проверяет, разрешены ли публикации в выбранном сообществе. Репост возможен только в группы, где пользователь имеет право создавать записи согласно настройкам группы. Если публикации разрешены только администраторам и модераторам — репост для подписчиков недоступен.

К репосту можно добавить произвольный текст. Справа от кнопки под оригинальным постом отображается счётчик репостов.

Просмотры

Счётчик просмотров (иконка глаза) показывает количество уникальных подписчиков, просмотревших пост.

  • Учитываются только подписчики сообщества/автора.
  • Просмотр фиксируется один раз для каждого подписчика, независимо от числа открытий.
  • Просмотр = факт показа поста в ленте или при прямом переходе по ссылке.
  • При наведении на иконку — список: имя пользователя + время просмотра.
  • Если просмотров 0 — число не отображается.

Удаление сообщества

⚠️ Физическое удаление из БД. Восстановление невозможно.

Доступно при одновременном выполнении двух условий: 1. Роль: владелец или администратор сообщества. 2. Право: «Администратор задач» в категории (удаление задач в системе доступно только администраторам системы и пользователям с правами администратора задач в категории).

Если хотя бы одно условие не выполнено — кнопка удаления не отображается.

Подтверждение: система показывает предупреждение перед выполнением.


Реакции

Для каждого поста доступна установка реакций (эмодзи). Полный список появляется при наведении на кнопку «Лайк».

  • Реакции группируются по эмодзи (аналогично реакциям в ленте сообщений).
  • При наличии реакций на посте — при наведении появляется кнопка «Добавить реакцию».
  • Наведение на установленную реакцию → всплывающая подсказка; клик → окно «Все реакции» со списком пользователей и их реакций.

Комментарии в публикациях

  • Каждая публикация открыта для комментирования.
  • Отображаются только пользовательские сообщения. Системные сообщения скрыты (добавление/изменение файла, новая версия файла, создание/закрытие обсуждения, ответ на вопрос).
  • Персональная настройка уведомлений пользователя не учитывается при отображении системных комментариев.
  • Длинные комментарии сворачиваются после 4 строк (кнопка «Показать полностью»). Раскрытый комментарий свернуть обратно нельзя.
  • Полная переписка — в модальном окне (кнопка треда под постом).

Механика треда комментариев

При написании первого комментария к посту система автоматически создаёт тред. Заголовок треда — «Комментарии» (v2.268+; ранее в качестве заголовка использовался текст поста).

Системное сообщение о факте создания треда (eventid = 183) в ленте публикаций не отображается — скрыто на уровне фронтенда.

Кнопка «Показать все комментарии» под постом открывает модальное окно с полной перепиской треда.

Блоки сайдбара ленты

Блок Содержание Поведение
Рекомендуемые До 5 пользователей, на которых ещё нет подписки Полный список по ссылке «Смотреть все» в модальном окне. После подписки пользователь исчезает из блока
Топ авторов До 5 пользователей с наибольшим числом сообщений Сообщества не отображаются. Рядом с подписанными — галочка
Все сообщества 5 открытых сообществ с наибольшим числом подписчиков Только группы, на которые пользователь не подписан. Полный список в модальном окне с поиском
Подписки Список сообществ, на которые подписан пользователь Кнопка создания новой группы (при наличии прав)

Поиск по публикациям

Публикации соцсети доступны через глобальный поиск → переключатель «Публикации».

Поиск работает по категориям системного раздела соцсети, указанным в RootCategoryId из socialNetworksSettings.


Бизнес-правила

  1. Создание публикаций и участие в группах определяется правами на категории и настройками группы.
  2. Видимость блока соцсети в UI определяется настройками рабочего места (CorporateNetworkFeedVisibleType).
  3. Пользовательские подписки определяют состав ленты.
  4. Публикация может быть переслана в другую группу, на личную стену или в чат.
  5. Из публикации можно создать статью пространства (перекрестный сценарий social-network -> spaces).
  6. В сообществе и на личной стене можно закрепить одну публикацию. Закреплённая публикация отображается первой в ленте и не смещается вниз при появлении новых записей. При закреплении другой публикации предыдущая автоматически снимается с закрепления. В общей ленте социальной сети закрепление не применяется. Право закрепления имеют владелец, администратор, модератор и подписчик, если в сообществе включено разрешение «Закреплять публикации для всех» (по модели прав чатов). Системное сообщение о факте закрепления в ленту не публикуется.

Пользовательские сценарии

  1. Открыть ленту соцсети и читать новые публикации.
  2. Подписаться/отписаться от пользователя или сообщества.
  3. Опубликовать пост в группе или на своей стене.
  4. Переслать публикацию.
  5. Создать статью пространства из публикации.
  6. Закрепить публикацию вверху ленты сообщества или личной стены и перейти к списку всех закреплённых публикаций.

Границы домена

Что относится к social-network

  • логика сообществ и подписок
  • UX и навигация ленты соцсети
  • конфигурация socialNetworksSettings
  • роли сообществ и разрешения для подписчиков
  • бизнес-правила постов, опросов, репостов, просмотров

Что относится к смежным доменам

  • хранение/выборка feed-сообщений: comments
  • чат-поведение и роли в группе: chat
  • статьи и wiki-страницы: spaces
  • вложения и файловые сценарии: files/disk

Перекрестные зависимости

Домен Зависимость
comments фактическая лента публикаций и комментариев
chat роли/настройки групп и часть messaging-сценариев
spaces создание статьи из публикации
portal виджет ленты соцсети на портальных страницах
files, disk вложения и обложки
permissions замещение прав, администратор задач в категории

Связанные документы

  • admin.md — администрирование (настройки, автоадминка, диагностика)
  • backend.md — контроллеры, SPA-компоненты, маршрутизация
  • database.md — таблицы, SQL-объекты, диагностика
  • data-flow.md — сквозные цепочки данных
  • ../spaces/business.md — статьи и пространства
  • ../comments/business.md — комментарии и треды