Логика
Из чего состоит комментарий:Поле «Автор» никогда не задаётся клиентом вручную. При создании автор подставляется из текущего авторизованного
пользователя (переданное клиентом значение игнорируется), а компания-владелец берётся из контекста текущей компании и
в запросе вообще не принимается как поле.
Авторство комментария — настоящая связь с пользователем, а не просто записанное число: целостность гарантируется базой
данных, сослаться на несуществующего пользователя невозможно. Если автора удалить, комментарий остаётся на месте, а его
авторство становится неизвестным («без автора») — вместе с этим право на удаление такого комментария остаётся только у
владельца компании. Фильтр по автору при этом продолжает работать по идентификатору: запрос по идентификатору удалённого
пользователя просто вернёт пустой список, а не ошибку.
- Просмотр списка — доступен любому авторизованному пользователю. В ответ попадают только комментарии текущей компании.
- Создание — доступно любому авторизованному пользователю.
- Изменение и просмотр отдельного комментария — доступны любому авторизованному пользователю (в пределах комментариев текущей компании).
- Удаление — разрешено только автору комментария либо суперпользователю компании.
При удалении компании все её комментарии удаляются автоматически. Аналогично, удаление самого типа объекта в системе
влечёт удаление связанных с ним комментариев. Для быстрого поиска по компании и родительскому объекту предусмотрены
служебные индексы, поэтому выборка комментариев конкретного объекта выполняется эффективно даже при большом их числе.