Studio-Yandex-Practicum / ProCharity_back_2.0

bot ProCharity (НКО Фонд Друзья)
13 stars 13 forks source link

Добавить эндпоинт "api/messages/new" с новой логикой выбора режима отправки #659

Open gorskyolga opened 2 weeks ago

gorskyolga commented 2 weeks ago

Нужно добавить эндпоинт "api/messages/new" с новой логикой выбора режима отправки. _Для инфо: url временный, в рамках задачи эндпоинт "api/messages" будет переименован в "api/send_telegramnotification". Соответственно эндпоинт "api/messages/new" станет "api/messages".

Эндпоинт должен быть доступен на post-запрос любому админу с is_active = True. В схеме два поля: "message" и "mode".

В отличие от первой версии "api/messages", поле "mode" нового эндпоинта должно принимать json с полями: "role", "status" и "authorization". Все поля необязательны. То есть может быть передан и пустой json. В зависимости от значения полей должна формироваться выборка пользователей и осуществляться рассылка сообщения по полученной выборке. Во всех случаях рассылка должна быть только по пользователи, у которых бот не заблокирован (поле banned в users должно быть равно False).

Формирование выборки пользователей должно происходить по тем же принципам, которые заложены в фильтрацию для get-запроса эндпоинта "api/users". Фильтрация реализовывалась в рамках задачи и PR.

Поле "role":

  1. Попадание в выборку для рассылки зависит от значения поля "role" в users.
  2. Возможные значения:
    • "volunteer" - пользователи со значением "volunteer" в поле "role" в users;
    • "fund" - пользователи со значением "fund" в поле "role" в users;
    • "unknown" - пользователей, у которых роль не определена;
    • значение не передано - пользователи, независимо от роли.

Поле "status":

  1. Попадание в выборку для рассылки зависит от значения поля "moderation_status" в пользователе сайта external_site_user, связанном с пользователем user.
  2. Возможные значения:
    • "new" - пользователи users, у связанных external_site_users которых в поле "moderation_status" значение "new";
    • "wait" - пользователи users, у связанных external_site_users которых в поле "moderation_status" значение "wait";
    • "moderated" - пользователи users, у связанных external_site_users которых в поле "moderation_status" значение "moderated";
    • "no_moderated" - пользователи users, у связанных external_site_users которых в поле "moderation_status" значение "no_moderated";
    • "blocked" - пользователи users, у связанных external_site_users которых в поле "moderation_status" значение "blocked";
    • "unknown" - пользователи users, у связанных external_site_users которых статус модерации не известен, или users, у которых нет привязки к external_site_user;
    • значение не передано - пользователи, независимо от статуса модерации.

Поле "authorization":

  1. Попадание в выборку для рассылки зависит от наличия связи пользователей user с пользователем сайта external_site_user.
  2. Возможные значения:
    • "True" - пользователи users, у которых есть привязка к external_site_user;
    • "False" - пользователи users, у которых нет привязки к external_site_user;
    • значение не передано - пользователи, независимо от наличия привязки к external_site_user.

Таким образом при пустом json в поле "mode" рассылка должна осуществляться по всем пользователям users, у которых бот не заблокирован.