Группа пользователей 'muted categories' не обновляет уведомления о категориях участников

Всякий раз, когда я обновляю скрытые категории в группе пользователей и подтверждаю действие «Обновить существующих пользователей?», изменения, похоже, не применяются. Например, посмотрите на пользователя #8, который является участником группы #42, но у него отсутствует множество записей в таблице category_user:

РЕЗУЛЬТАТЫ SQL
  • Подтверждение членства пользователя #8 в группе #42
SELECT gu.*, g.name
FROM group_users gu
JOIN groups g ON gu.group_id = g.id
WHERE user_id=8 and gu.group_id = 42;
  id  | group_id | user_id |         created_at         |         updated_at         | owner | notification_level |     first_unread_pm_at     |       name        
------+----------+---------+----------------------------+----------------------------+-------+--------------------+----------------------------+-------------------
 4207 |       42 |       8 | 2023-07-03 11:36:43.828233 | 2023-07-03 11:36:43.828233 | f     |                  3 | 2023-12-29 22:52:43.371588 | japanese-learners
  • Показать текущие уровни уведомлений пользователя #8
SELECT cu.*, c.name, c.parent_category_id
FROM category_users cu
JOIN categories c ON cu.category_id = c.id
WHERE cu.user_id = 8;
  id   | category_id | user_id | notification_level | last_seen_at |     name      | parent_category_id 
-------+-------------+---------+--------------------+--------------+---------------+--------------------
 42289 |           1 |       8 |                  0 |              | Uncategorized |                   
  5981 |           5 |       8 |                  1 |              | Reading       |                  7
  7981 |           6 |       8 |                  1 |              | Watching      |                  7
   215 |           7 |       8 |                  1 |              | Japanese      |                   
  6981 |           9 |       8 |                  1 |              | Book Clubs    |                  5
   214 |          10 |       8 |                  0 |              | Korean        |                   
  2386 |          11 |       8 |                  0 |              | Reading       |                 10
  4384 |          12 |       8 |                  0 |              | Watching      |                 10
  3385 |          13 |       8 |                  0 |              | Book Clubs    |                 11
 36995 |          16 |       8 |                  0 |              | German        |                   
  • Показать уровни уведомлений из группы #42 (значительно больше)
SELECT gcnd.*, c.name, c.parent_category_id
FROM group_category_notification_defaults gcnd
JOIN categories c ON gcnd.category_id = c.id
WHERE group_id=42;
 id  | group_id | category_id | notification_level |     name      | parent_category_id 
-----+----------+-------------+--------------------+---------------+--------------------
   1 |       42 |          10 |                  0 | Korean        |                   
   8 |       42 |           7 |                  1 | Japanese      |                   
  11 |       42 |          13 |                  0 | Book Clubs    |                 11
  12 |       42 |          11 |                  0 | Reading       |                 10
  14 |       42 |          12 |                  0 | Watching      |                 10
  26 |       42 |           9 |                  1 | Book Clubs    |                  5
  27 |       42 |           6 |                  1 | Watching      |                  7
  28 |       42 |           5 |                  1 | Reading       |                  7
  97 |       42 |          16 |                  0 | German        |                   
 174 |       42 |          21 |                  0 | Book Clubs    |                 18
 177 |       42 |          18 |                  0 | Reading       |                 16
 178 |       42 |          22 |                  0 | Reading       |                 17
 179 |       42 |          23 |                  0 | Watching      |                 17
 180 |       42 |          17 |                  0 | Spanish       |                   
 181 |       42 |          19 |                  0 | Watching      |                 16
 182 |       42 |          25 |                  0 | Book Clubs    |                 22
 367 |       42 |           1 |                  0 | Uncategorized |                   

Есть ли способ запустить процесс «update_existing_users» вручную в консоли Rails? Я мало знаком с Rails, поэтому не смог найти его в коде. Думаю, было бы полезно попробовать запустить его вручную и проверить, заключается ли проблема в самом процессе обновления или в его запуске.

Дайте знать, если у кого-то есть идеи или помощь!

Спасибо

Дополнительная информация:
Мой сайт: https://forums.learnnatively.com/
Версия Discourse: 3.2.0.beta4-dev (46eec95719)

Итак, после более тщательного анализа выяснилось, что код обновляет только изменения в уведомлениях по умолчанию для категорий на уровне группы пользователей… см. здесь обработку изменений и здесь обновление в БД.

Это означает, что если по какой-либо причине ваш первоначальный процесс обновления группы не обновил существующие объекты пользователей, повторное сохранение группы (даже с изменениями) не обязательно вызовет обновление уведомлений по умолчанию для категорий для участников группы.

Я не до конца понимаю, почему мой первоначальный процесс обновления не сработал, но так как я использовал вызов API, а не панель администратора, возможно, я указал неверный параметр ‘update_existing_users’ (я сделал json-дамп значения ‘True’ на Python).

В любом случае, мне удалось решить эту проблему.

Решение:

  1. Перейдите в админку группы пользователей и сбросьте любые настройки категорий по умолчанию, которые, как кажется, ещё не обновлены у пользователей. (Например: если у участников группы не установлено правильное «игнорирование» для категории «Поддержка», удалите эту категорию из списка игнорируемых. Если эта категория ранее была в статусе «нормально», верните её в «нормально».)
  2. Сохраните группу и ответьте «нет» на вопрос «обновить существующих пользователей».
  3. Измените настройки уведомлений о категориях группы на желаемые.
  4. Сохраните группу и ответьте «да» на вопрос «обновить существующих пользователей».

Вуаля, теперь всё должно работать!

Кстати, я не имею никакого мнения о том, является ли такое поведение правильным или нет. Однако его, вероятно, стоит задокументировать :slight_smile: