Запрос связанных данных
Конфигурация
Структура описывается в файле internal/data/collector/types/index.go:
// Config представляет общий конфиг для сборки связанных сущностей для модели одного типа
type Config struct {
// Собственный тип модели, применяется для запросов через ent
SelfModelType string
// Тип соответствующих данных в 1С, применяется при запросе обратно связанных сущностей для ограничения запроса.
// Например:
// Обратно связанной сущностью для transport_operations может быть transport_operation_states. Последняя сущность
// может указывать на конкретную транспортную операцию с помощью trip_type и trip_uid.
// Технически, trip_type может быть равен не только значению "jcfg:DocumentRef.ТранспортнаяОперация".
// Указание типа SelfCargoType = "jcfg:DocumentRef.ТранспортнаяОперация" добавит помимо сравнения trip_uid
// сравнение по trip_type = "jcfg:DocumentRef.ТранспортнаяОперация".
SelfCargoType string
// Набор базовых предикатов, то есть условий для выборки моделей без учёта применения фильтра.
// Пример: может использоваться для транспортных операций, выбирая только те, у которых методом транспортировки
// указано авто.
Predicates []func(selector *sql.Selector)
// Колонки для запроса данных сущности. Имеет смысл указывать только те, что потребуются для вывода.
SelfFields []string
// Функция для преобразования данных текущей сущности
SelfMapper func(item any, prefetched PrefetchedByModelType) ItemMapped
// Конфигурация запрашиваемых сущностей вместе с основным запросом параллельно.
// Используется для небольших справочников или перечислений, чтобы не запрашивать их отдельными запросами.
// Позволяет сократить общее время запроса.
PrefetchTypes *RelatedConfig
// Набор конфигураций для связанных сущностей. Конфигураций может быть несколько по следующей причине:
// Первая конфигурация запрашивает связанные сущности,
// вторая конфигурация запрашивает следующие связанные сущности для предыдущих связанные сущностей.
RelationConfigs []RelationConfig
// Функция для дозапроса нужных сущностей после основных запросов.
// Используется потому, что не все нужные связанные сущности получается выразить с помощью существующих
// конфигураций.
// Например:
// Для списка Контрагентов прямо связанными сущностями являются Физические лица,
// для которых обратно связанными сущностями являются Документы физических лиц.
// Сейчас нет возможности для каждого отдельного физического лица указать конфигурацию обратно связанных сущностей.
// Потому решением этой проблемы является произвольный дозапрос нужных данных.
PostFetch PostFetcher
}
Чаще всего применяется две версии конфигурации:
by_filter— конфигурация при запросе с произвольным фильтром для модели данных;by_uids— конфигурация при запросе конкретных моделей данных по их уникальным идентификаторам.
Конфигурация по фильтру обычно применяется для вывода данных в таблице.
Конфигурация по идентификаторам применяется для вывода одной или нескольких моделей данных в отдельном окне. Такая конфигурация обычно содержит больше связанных данных, чем конфигурация по фильтру.
Примеры конфигураций можно посмотреть в файлах internal/data/repository/*/config_by_*.go