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