Documentation
¶
Overview ¶
Package service — публичный сервисный слой библиотеки и единственная точка входа для CLI, REST и встраивания в веб-бэкэнд: upsert записей, поиск, карточка, импорт/экспорт, операции с каталогом, производители (docs/plan/01-architecture.md §2.4).
Index ¶
- Constants
- type AnalogInput
- type App
- type AttributeFilter
- type Card
- type CardAttribute
- type CardGroup
- type CardLink
- type CardSource
- type CardSynonym
- type CardTypeDiff
- type CardTypeGroup
- type CardTypeSibling
- type CardTypeValue
- type CardValue
- type CardVariant
- type CatalogService
- type ChangeEvent
- type ChangeOp
- type ChangesPage
- type Config
- type DesignationService
- func (s *DesignationService) Parse(ctx context.Context, text string) (domain.ParsedDesignation, error)
- func (s *DesignationService) ParseForSystem(ctx context.Context, text string, system domain.System, kind domain.Kind) (domain.ParsedDesignation, error)
- func (s *DesignationService) ParseWithCandidates(ctx context.Context, text string, system domain.System, kind domain.Kind) (domain.ParsedDesignation, []domain.ParsedDesignation, error)
- func (s *DesignationService) Suggest(ctx context.Context, prefix string, kind domain.Kind, limit int) ([]Suggestion, error)
- type DeviceInput
- type DeviceService
- func (s *DeviceService) Changes(ctx context.Context, after int64, limit int) (ChangesPage, error)
- func (s *DeviceService) Count(ctx context.Context, kind *domain.Kind) (int, error)
- func (s *DeviceService) Create(ctx context.Context, in DeviceInput) (Outcome, error)
- func (s *DeviceService) Delete(ctx context.Context, kind domain.Kind, designation string) (bool, error)
- func (s *DeviceService) DryRun(ctx context.Context, in DeviceInput, snap *catalog.Snapshot, ...) (Outcome, error)
- func (s *DeviceService) Find(ctx context.Context, kind domain.Kind, designation string) (FindResult, error)
- func (s *DeviceService) Get(ctx context.Context, kind domain.Kind, designation string) (*Card, bool, error)
- func (s *DeviceService) GetByID(ctx context.Context, id int64) (*Card, bool, error)
- func (s *DeviceService) GetByIDs(ctx context.Context, ids []int64) ([]*Card, error)
- func (s *DeviceService) ListIDsByKind(ctx context.Context, kind domain.Kind) ([]int64, error)
- func (s *DeviceService) ParameterStats(ctx context.Context, kind domain.Kind) (ParameterStats, error)
- func (s *DeviceService) Search(ctx context.Context, q SearchQuery) (SearchPage, error)
- func (s *DeviceService) Upsert(ctx context.Context, in DeviceInput) (Outcome, error)
- func (s *DeviceService) ValidateSearch(ctx context.Context, q SearchQuery) error
- type FieldFilter
- type FilterOp
- type FindResult
- type Outcome
- type ParameterFilter
- type ParameterStat
- type ParameterStats
- type ParameterValueFreq
- type PendingDesignations
- type PoolConfig
- type SearchItem
- type SearchPage
- type SearchQuery
- type SearchValue
- type SectionInput
- type Services
- type SortField
- type SourceInput
- type SourceRefInput
- type SourceService
- type Stats
- type Suggestion
- type SynonymInput
- type ValueColumn
- type VariantInput
Constants ¶
const ( SearchDefaultLimit = 50 SearchLimitMax = 200 SuggestDefaultLimit = 10 SuggestLimitMax = 50 // Фильтр по набору id (docs/plan/04-module-functionality.md §1.1): // до 200 положительных значений повторяемого параметра id. SearchIDsMax = 200 // Колонки значений строк поиска: до 16 кодов повторяемого // параметра values (параметр либо attr.<атрибут>). SearchValuesMax = 16 // Поток изменений (change feed): страница по умолчанию и потолок // GET /api/v1/changes. ChangesDefaultLimit = 100 ChangesLimitMax = 1000 )
Лимиты пагинации (docs/plan/04-module-functionality.md §1.1: limit ≤ 200); потолки нужны транспорту для валидации параметров запроса.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type AnalogInput ¶
AnalogInput — исходящая ссылка-аналог (D8): обозначение того же класса, опционально с заметкой характера замены в этом направлении.
type App ¶
type App struct {
// contains filtered or unexported fields
}
App — открытое приложение: хранилище, кэш каталога и сервисы. Безопасно для одновременного использования несколькими горутинами (stateless поверх пулов соединений; снимок каталога иммутабелен).
func Open ¶
Open открывает приложение по конфигурации: открывает хранилище, при EnsureCreated выполняет DDL и применяет сиды каталога на пустую базу (docs/plan/02-database.md §5.3), проверяет версию схемы (несовпадение — громкий отказ, продолжение работы запрещено).
func (*App) Revisions ¶
Revisions возвращает текущие счётчики catalog_revision и data_revision (ETag REST — docs/plan/02-database.md §5.5).
func (*App) Snapshot ¶
Snapshot возвращает актуальный снимок каталога (кэш с проверкой catalog_revision на каждом обращении).
type AttributeFilter ¶
AttributeFilter — фильтр по атрибуту (код op значение).
type Card ¶
type Card struct {
ID int64
Kind domain.Kind
System domain.System
Designation string
Fields []domain.Field
Attributes []CardAttribute
Groups []CardGroup
Variants []CardVariant
TypeGroup *CardTypeGroup
Manufacturers []string
Analogs []CardLink
Backlinks []CardLink
Synonyms []CardSynonym
Sources []CardSource
}
Card — карточка записи: обозначение, система, поля разбора, атрибуты, значения параметров по группам, исполнения, группа типа (одно базовое обозначение — соседние записи и различия), производители, аналоги (исходящие и встречные — docs/plan/02-database.md §6), исторические названия (синонимы — план 03 §9) и источники данных (план 03 §13).
type CardAttribute ¶
type CardAttribute struct {
Code string
Text *string
// Texts — список заметок атрибута типа text_list (порядок — порядок
// списка наполнения); nil у скалярных атрибутов.
Texts []string
Num *float64
Bool *bool
}
CardAttribute — значение атрибута в карточке (отображаемое название — бандлы internal/i18n: attr.<код> — D9).
type CardGroup ¶
CardGroup — группа каталога со значениями на карточке (отображаемое название — бандлы internal/i18n: group.<код> — D9).
type CardLink ¶
CardLink — ссылка-аналог: исходящая (аналоги записи) либо встречная (кто ссылается на запись).
type CardSource ¶ added in v0.3.0
type CardSource struct {
Code string
Title string
Type string
Authors []string
Editors []string
Year *int
Publisher string
Edition string
ISBN string
URLs []string
Note string
}
CardSource — источник данных записи на карточке: полное библиогра- фическое определение и заметка места в источнике (Note). Отображаемое название типа — бандлы internal/i18n: sourcetype.<код> (D9); порядок — канонический, по коду источника.
type CardSynonym ¶ added in v0.0.8
CardSynonym — историческое название записи на карточке: заметка — происхождение имени, годы — период его употребления (nil — не задано).
type CardTypeDiff ¶ added in v0.0.4
type CardTypeDiff struct {
Parameter string
Unit string
Values []CardTypeValue
}
CardTypeDiff — параметр, значения которого различаются между записями группы типа (в матрицу входят только различия; порядок значений — по обозначению записи).
type CardTypeGroup ¶ added in v0.0.4
type CardTypeGroup struct {
Base string
Siblings []CardTypeSibling
Diffs []CardTypeDiff
}
CardTypeGroup — группа типа: записи одного базового обозначения (base) и мини-матрица различий их данных типа в целом (план 03 §7).
type CardTypeSibling ¶ added in v0.0.4
CardTypeSibling — запись группы типа: запись того же класса с тем же базовым обозначением (поле base), кроме самой записи карточки.
type CardTypeValue ¶ added in v0.0.4
CardTypeValue — значение параметра одной записи группы типа (строка мини-матрицы различий: параметр × записи).
type CardValue ¶
type CardValue struct {
Parameter string
Unit string
Exact *float64
Min *float64
Max *float64
Text *string
Conditions []catalog.ConditionValue
}
CardValue — значение параметра с условиями в карточке (отображаемые название и символ единицы — бандлы internal/i18n: param.<код>, unit.<код>.symbol — D9; Unit — канонический код).
type CardVariant ¶
type CardVariant struct {
Label string
Groups []CardGroup
Attributes []CardAttribute
}
CardVariant — исполнение на карточке (матрица «номинал × напряжение → габариты/масса» собирается группами каталога; атрибуты — конструктивные признаки исполнения).
type CatalogService ¶
type CatalogService struct {
// contains filtered or unexported fields
}
CatalogService — операции с каталогом: снимок для UI и валидации, импорт (расширение каталога — план 02 §5.4). Экспорт — этап 4 (реестр форматов наполнения).
func (*CatalogService) Import ¶
Import применяет каталог upsert'ом по коду после валидации метасхемы (ApplyCatalog: вставка новой строки либо обновление полей; enum-значения, наборы условий и применимость параметров/атрибутов к классам замещаются целиком по строке; незаданные (нулевые) sort_order существующих строк сохраняются из снимка; привязки систем и правил к классам — только добавление; непустой список проблем — отказ целиком). Изменение каталога инкрементирует catalog_revision атомарно в той же транзакции.
type ChangeEvent ¶ added in v0.0.5
type ChangeEvent struct {
ID int64
Revision int64
Op ChangeOp
Kind domain.Kind
Designation string
DeviceID int64
}
ChangeEvent — событие потока изменений записей: одна применённая операция над записью устройства. Revision — data_revision транзакции события (после инкремента); курсор потребителя — монотонный ID (события одной ревизии различаются id). События покрывают только изменения данных: изменения каталога отслеживаются ETag GET /catalog.
type ChangeOp ¶ added in v0.0.5
type ChangeOp string
ChangeOp — код операции события потока изменений: стабильные коды REST/Go API (created | updated | deleted), отображаемых строк нет — это данные для синхронизации производных индексов, не UI.
const ( // ChangeOpCreated — запись создана (исход Upsert/Create — Added). ChangeOpCreated ChangeOp = "created" // ChangeOpUpdated — секции существующей записи применены // (исход UpdatedExisting). ChangeOpUpdated ChangeOp = "updated" // ChangeOpDeleted — запись удалена (каскад), включая компенсационные // удаления импортёра. ChangeOpDeleted ChangeOp = "deleted" )
Реестр операций потока изменений.
type ChangesPage ¶ added in v0.0.5
type ChangesPage struct {
Events []ChangeEvent
DataRevision int64
}
ChangesPage — страница потока изменений с текущей data_revision (согласованы: читаются одним снимком пула чтения).
type Config ¶
type Config struct {
Dialect string // "sqlite" | "postgres"
DSN string // путь файла sqlite / DSN postgres
Pool PoolConfig
Log *slog.Logger
EnsureCreated bool
}
Config — конфигурация открытия приложения (план 04 §1: диалект, DSN, пул, логгер). EnsureCreated выполняет DDL и применяет сиды каталога на пустую базу — только у команд записи (init/import/add); по умолчанию выключено: чтение требует инициализированную базу (database_not_initialized иначе).
type DesignationService ¶
type DesignationService struct {
// contains filtered or unexported fields
}
DesignationService — обозначения: разбор с автодетектом и автодополнение по префиксу (docs/plan/04-module-functionality.md §1.1).
func (*DesignationService) Parse ¶
func (s *DesignationService) Parse(ctx context.Context, text string) (domain.ParsedDesignation, error)
Parse разбирает обозначение с автодетектом класса и системы: строгие грамматики (gost/ost/pro/jedec/jis) — кодом, порядок попыток фиксирован планом 03 §2.4; системы без разбора (other) автодетекта не имеют.
func (*DesignationService) ParseForSystem ¶
func (s *DesignationService) ParseForSystem(ctx context.Context, text string, system domain.System, kind domain.Kind) (domain.ParsedDesignation, error)
ParseForSystem разбирает обозначение с явной системой и необязательным классом (переопределяют автодетект; класс обязателен для other) — CLI parse --system/--kind.
func (*DesignationService) ParseWithCandidates ¶ added in v0.0.5
func (s *DesignationService) ParseWithCandidates(ctx context.Context, text string, system domain.System, kind domain.Kind) (domain.ParsedDesignation, []domain.ParsedDesignation, error)
ParseWithCandidates разбирает обозначение (автодетект либо явная система с необязательным классом) и перечисляет всех кандидатов строгих систем в фиксированном порядке автодетекта — REST GET /api/v1/parse: перечень принявших обозначение систем заменяет числовой «конфиденс» строгих грамматик (первый кандидат при автодетекте совпадает с основным разбором). Явная система авторитетна: когда основной разбор удался, а перечисление кандидатов — нет (other вне строгих грамматик), кандидаты пусты.
type DeviceInput ¶
type DeviceInput struct {
Name string
System domain.System
Kind domain.Kind
Fields *[]domain.Field
Attributes []catalog.AttributeValue
Sections []SectionInput
Manufacturers *[]string
Variants *[]VariantInput
Analogs *[]AnalogInput
Synonyms *[]SynonymInput
// Sources — ссылки на источники данных записи (план 03 §13):
// семантика секции общая (отсутствует — не менять, задана — заменить
// ссылки целиком, [] — очистить, ошибка — запись не применяется).
Sources *[]SourceRefInput
}
DeviceInput — запись наполнения для Upsert. Семантика секций (docs/plan/01-architecture.md §2.4): отсутствует (nil) — не менять; задана — заменить целиком; пустой непустой-nil срез/[] — очистить; ошибка в любом значении секции — запись не применяется вовсе. System/Kind необязательны (автодетект; Kind обязателен для other). Fields — явные классификацион- ные поля (material/subclass/adjustment/category/assembly): допустимы только те, что парсер системы записи не устанавливает сам, и только применимые к классу (проверка — сервисным слоем после разбора).
type DeviceService ¶
type DeviceService struct {
// contains filtered or unexported fields
}
DeviceService — операции над записями устройств (docs/plan/04-module-functionality.md §1.1).
func (*DeviceService) Changes ¶ added in v0.0.5
func (s *DeviceService) Changes(ctx context.Context, after int64, limit int) (ChangesPage, error)
Changes возвращает события изменений записей с идентификатором больше after в порядке возрастания id — не более limit штук — вместе с текущей data_revision. Курсор — id последнего полученного события (after = 0 — с начала фида); ревизия курсором быть не может: её связь с событиями — деталь пути записи (сегодня один инкремент на событие, но возможны несколько событий в одной транзакции либо инкремент мимо фида), id — плотный монотонный курсор вставки. Валидация — CodeValidationFailed: after ≥ 0, 1 ≤ limit ≤ ChangesLimitMax (встраиваемым потребителям Go API — тот же контракт, что у REST).
func (*DeviceService) Create ¶
func (s *DeviceService) Create(ctx context.Context, in DeviceInput) (Outcome, error)
Create применяет запись наполнения только как создание (POST REST): тот же конвейер проверок, что Upsert, но существующая запись (kind, designation) — найденная в транзакции либо столкнувшаяся по уникальному ключу при вставке (параллельный создатель) — отказ already_exists без применения секций и без изменения базы: 409 перестаёт мутировать по построению.
func (*DeviceService) Delete ¶
func (s *DeviceService) Delete(ctx context.Context, kind domain.Kind, designation string) (bool, error)
Delete удаляет запись (каскад из devices по всем дочерним таблицам, включая обе стороны device_analogs) с чисткой сирот производителей; false — запись не найдена. Класс валидируется по снимку каталога — единому источнику истины (расширяемому импортом), как в Get/Search. Удаление атомарно по ключу в транзакции записи (без окна между поиском и удалением): конкурентное удаление того же обозначения оставляет этот вызов без «пустого» успеха и без инкремента ревизии. Удаление инкрементирует data_revision и пишет событие change_events (op=deleted; компенсационные удаления импортёра идут этим же путём — событие возникает само).
func (*DeviceService) DryRun ¶
func (s *DeviceService) DryRun(ctx context.Context, in DeviceInput, snap *catalog.Snapshot, pending PendingDesignations) (Outcome, error)
DryRun проверяет запись наполнения без изменения базы и возвращает исход, который вернул бы Upsert (import --dry-run). snap — снимок каталога для проверки (nil — актуальный из кэша; dry-run файла, расширяющего каталог, проверяет записи по гипотетическому снимку); pending разрешает ссылки на обозначения, создаваемые этим же прогоном.
func (*DeviceService) Find ¶
func (s *DeviceService) Find(ctx context.Context, kind domain.Kind, designation string) (FindResult, error)
Find ищет запись по точному обозначению; порядок разрешения — точный ключ записи, затем историческое название-синоним (план 03 §9: обозначение-синоним не является записью, попадание помечается MatchedBySynonym), затем подсказки (равнозначная по материалу запись полупроводников gost — Г/1, К/2, физически равнозначные символы, записи раздельны; сосед по типу). Разбор обозначения для подсказок выполняется после разрешения: точное попадание и синоним не требуют разбираемой грамматики (записи other).
func (*DeviceService) Get ¶
func (s *DeviceService) Get(ctx context.Context, kind domain.Kind, designation string) (*Card, bool, error)
Get возвращает карточку по классу и обозначению (точный ключ). kind == "" — любой класс (обозначение уникально в пределах класса, при коллизии между классами вернётся детерминированно первая запись).
func (*DeviceService) GetByIDs ¶
GetByIDs возвращает карточки по списку стабильных id пакетным чтением дочерних таблиц (экспорт — без запросов на каждую запись): порядок результата — по порядку id входа, параллельно удалённые записи пропускаются.
func (*DeviceService) ListIDsByKind ¶
ListIDsByKind перечисляет id записей класса в порядке (designation) одним запросом — последовательная выгрузка без дрейфа страниц (параллельные вставки/удаления не дают дубли и пропуски выборки).
func (*DeviceService) ParameterStats ¶ added in v0.0.5
func (s *DeviceService) ParameterStats(ctx context.Context, kind domain.Kind) (ParameterStats, error)
ParameterStats собирает фасетные агрегаты класса: границы и частоты — по фактическим данным записей класса (тип в целом и исполнения — как у фильтров поиска), отбор и разбивка по типу значения — по каталогу; порядок параметров — снимок каталога (алфавит кодов, как /catalog), значения — по убыванию частоты, затем по тексту. Параметры без данных в классе в результат не входят. Класс обязан существовать в каталоге (неизвестный — ошибка валидации).
func (*DeviceService) Search ¶
func (s *DeviceService) Search(ctx context.Context, q SearchQuery) (SearchPage, error)
Search выполняет поиск: подстрока обозначения, фильтр по набору id (пересечение с прочими фильтрами; без сортировки — порядок передачи id), фильтры полей/атрибутов/параметров (применимость к классу запроса — D7, ошибки валидации запроса), сортировка с финальным (kind, designation), колонки значений (пакетная проекция значений параметров/атрибутов в строки выдачи), пагинация (limit ≤ 200); вариантные параметрические фильтры применяются в пределах одного исполнения (docs/plan/04-module-functionality.md §1.1).
func (*DeviceService) Upsert ¶
func (s *DeviceService) Upsert(ctx context.Context, in DeviceInput) (Outcome, error)
Upsert применяет запись наполнения с семантикой секций (docs/plan/02-database.md §6): разбор обозначения → слитое состояние (вход + текущие секции) → каноническое сравнение (побайтово тот же вход — Skipped до валидации, без записи в БД и без инкремента ревизий: эволюция каталога не делает существующие записи неотрекаемыми) → валидация движком → применение секций целиком + инкремент data_revision. Ошибка в любом значении секции — запись не применяется вовсе.
func (*DeviceService) ValidateSearch ¶
func (s *DeviceService) ValidateSearch(ctx context.Context, q SearchQuery) error
ValidateSearch проверяет поисковый запрос по каталогу (класс, система, фильтры атрибутов/параметров и их применимость) без обращения к БД: условное кэширование транспорта (304 по ETag) обязано отвечать невалидному запросу 400 до отсечения — валидация дешевле выполнения.
type FieldFilter ¶
type FieldFilter struct {
Field string
Text string
Texts []string
Num float64
HasNum bool
Op FilterOp
}
FieldFilter — фильтр по полю разбора обозначения (material, subclass, junctions, group, dev_number, series…): текстовое равенство (Text), набор текстовых значений с семантикой ИЛИ (Texts — словарные поля мультивыбора material/subclass/adjustment/category; повторные фильтры того же поля в запросе не сливаются — каждое значение отдельно остаётся семантикой И; потолка размера набора нет — REST ограничен мощностью словаря канонизацией значений, прямые Go-вызовы держат набор разумным) либо числовое со сравнением (Num + Op).
type FindResult ¶
type FindResult struct {
Found *Card
MatchedBySynonym string
Suggestion *Card
TypeSuggestion *Card
}
FindResult — результат find: точное совпадение (MatchedBySynonym — обозначение синонима, когда совпадение нашлось по историческому названию, а не по ключу записи), подсказка равнозначной по материалу записи (полупроводники gost: Г/1, К/2 — раздельные записи) и подсказка соседом по типу (запись того же базового обозначения с другой буквой классификации либо хвостовым элементом — КТ315А → КТ315Б).
type Outcome ¶
type Outcome string
Outcome — исход Upsert записи (docs/plan/04-module-functionality.md §1.1).
const ( // OutcomeAdded — записи не было, создана. OutcomeAdded Outcome = "Added" // OutcomeUpdatedExisting — запись была, секции применены. OutcomeUpdatedExisting Outcome = "UpdatedExisting" // OutcomeSkipped — слитое состояние совпадает с текущим: записи в БД // не выполнялось, ревизии не инкрементировались. OutcomeSkipped Outcome = "Skipped" )
Реестр исходов Upsert.
type ParameterFilter ¶
type ParameterFilter struct {
Parameter string
Min *float64
Max *float64
Exact *float64
Text string
}
ParameterFilter — параметрический фильтр: границы (Min/Max), точное значение (Exact) либо текст/enum (Text); вариантные параметры применяются в пределах одного исполнения.
type ParameterStat ¶ added in v0.0.5
type ParameterStat struct {
Parameter string
Unit string
Min, Max *float64
Values []ParameterValueFreq
}
ParameterStat — агрегат одного параметра: границы численных значений (Min/Max, nil — значений такой формы нет; семантика — как у фильтров поиска: границы применяются к value_min/value_max и value_exact) либо частоты текстовых значений по записям класса.
type ParameterStats ¶ added in v0.0.5
type ParameterStats struct {
Kind domain.Kind
DataRevision int64
Parameters []ParameterStat
}
ParameterStats — фасетные агрегаты значений параметров класса: min/max численных параметров для слайдеров параметрических фильтров и частоты текстовых (enum) значений.
type ParameterValueFreq ¶ added in v0.0.5
ParameterValueFreq — текстовое значение параметра и число записей класса, имеющих его.
type PendingDesignations ¶
type PendingDesignations struct {
Records func(kind domain.Kind, designation string) bool
Created func(kind domain.Kind, designation string) bool
Synonym func(kind domain.Kind, designation string) (ownerDesignation string, claimed bool)
Sources func(code string) bool
}
PendingDesignations — план прогона импорта для dry-run: обозначения записей, которые прогон создаст (Records — разрешение исходящих ссылок-аналогов на записи, встречающиеся в файле позже; реальный импорт разрешает их многопроходно), и последовательная симуляция применённой части прогона: обозначения уже проверенных записей (Created) и заявки их исторических названий (Synonym). Конфликт уникальности синонима dry-run обязан видеть в том же месте файла, что и реальный импорт, — прогон ничего не пишет в БД. Sources — коды источников, определённых корневой секцией sources этого же файла (dry-run не применяет реестр — ссылки записей на них валидны без строки в базе). Поля необязательны (nil — знания нет); Created и Synonym регистрируются по порядку файла после успешной проверки записи.
type PoolConfig ¶
type PoolConfig struct {
MaxOpen int
MaxIdle int
ConnMaxLifetime int64 // наносекунды; 0 — без ограничения
BusyTimeout int64 // миллисекунды (sqlite); 0 — по умолчанию
}
PoolConfig — параметры пулов соединений.
type SearchItem ¶
type SearchItem struct {
ID int64
Kind domain.Kind
System domain.System
Designation string
Fields []domain.Field
Values []SearchValue
}
SearchItem — строка результатов поиска; Values — значения запрошенных колонок в порядке запроса, присутствующие у записи (нет значения — нет элемента).
type SearchPage ¶
type SearchPage struct {
Items []SearchItem
Total int
Limit int
Offset int
}
SearchPage — страница результатов с общим числом записей под фильтрами.
type SearchQuery ¶
type SearchQuery struct {
Kind domain.Kind
System domain.System
Query string
IDs []int64
Fields []FieldFilter
Attributes []AttributeFilter
Parameters []ParameterFilter
Sort []SortField
Values []ValueColumn
Limit int
Offset int
}
SearchQuery — запрос поиска: класс, система, подстрока обозначения, фильтр по набору стабильных id (пересечение с прочими фильтрами; без сортировки порядок выдачи — порядок передачи id), фильтры полей/ атрибутов/параметров, сортировка, колонки значений (пакетная проекция в строки выдачи), пагинация (docs/plan/04-module-functionality.md §1.1).
type SearchValue ¶ added in v0.0.7
type SearchValue struct {
Column ValueColumn
Value CardValue
}
SearchValue — значение колонки значений строки поиска: запрошенная колонка и её значение у записи формы CardValue (у атрибутов Parameter — код атрибута, заполнены Text либо Exact).
type SectionInput ¶
type SectionInput struct {
Section string
Values []catalog.ParameterValue
}
SectionInput — секция группы параметров записи (имя — из группы каталога: parameters/ratings/dimensions); nil-семантики на уровне DeviceInput.
type Services ¶
type Services struct {
Devices *DeviceService
Designations *DesignationService
Catalog *CatalogService
Sources *SourceService
}
Services — доступ к сервисам приложения.
type SortField ¶
SortField — ключ сортировки: "designation", "id", код поля разбора (Numeric — поле числовое) либо код параметра каталога (Param — всегда численная сортировка по значению параметра; допустимость — сервисный слой по снимку каталога).
type SourceInput ¶ added in v0.3.0
type SourceInput struct {
Code string
Title string
Type string
Authors []string
Editors []string
Year *int
Publisher string
Edition string
ISBN string
URLs []string
}
SourceInput — определение источника данных записи (корневая секция sources, план 03 §13): code/title/type обязательны, остальное — опционально; Authors/Editors/URLs — упорядоченные списки без повторов (URLs — оригинал, зеркала, архивные копии; порядок значим, первый элемент предпочитаемый). Библиографические тексты — не локализуемые данные записи (как manufacturers/notes), не каталожные строки (D9).
type SourceRefInput ¶ added in v0.3.0
SourceRefInput — ссылка записи на источник: код реестра и заметка места в источнике («таблица 5.3», «с. 214», «лист 3»).
type SourceService ¶ added in v0.3.0
type SourceService struct {
// contains filtered or unexported fields
}
SourceService — реестр источников данных записей: валидация определений корневой секции sources, применение (upsert по коду) и чтение.
func (*SourceService) Apply ¶ added in v0.3.0
func (s *SourceService) Apply(ctx context.Context, defs []SourceInput, snap *catalog.Snapshot) (bool, error)
Apply применяет определения источников (upsert по коду: вставка новой строки реестра либо обновление полей и замещение лиц/ссылок целиком). Возвращает true, если хотя бы одна строка изменилась: изменение инкрементирует data_revision — карточки записей показывают источники, ETag /components обязан измениться; повторный импорт того же файла ревизию не двигает (идемпотентность). Ошибки валидации — до открытия транзакции.
func (*SourceService) ListSources ¶ added in v0.3.0
ListSources читает весь реестр источников в порядке кода (служебное чтение; экспорт пользуется ссылками карточек).
func (*SourceService) ValidateSourceDefs ¶ added in v0.3.0
func (s *SourceService) ValidateSourceDefs(defs []SourceInput, snap *catalog.Snapshot) error
ValidateSourceDefs проверяет определения источников по снимку каталога: код (непустой, строчная латиница/цифры/подчёркивание), название, тип (словарь source_types), год в границах, списки авторов/редакторов/ссылок без пустых элементов и повторов, уникальность кодов в наборе. Ошибки — значения (CodeValidationFailed; неизвестный словарю тип — CodeUnknownSource).
type Stats ¶
type Stats struct {
Counts map[domain.Kind]int
Total int
SchemaVersion int
CatalogRevision int64
DataRevision int64
}
Stats — агрегаты для REST /api/v1/stats: количества записей по классам, версия схемы модуля и счётчики ревизий (docs/plan/04-module-functionality.md §2).
type Suggestion ¶
Suggestion — подсказка автодополнения по префиксу обозначения.
type SynonymInput ¶ added in v0.0.8
SynonymInput — историческое название записи (синоним, план 03 §9): обозначение, опционально заметка происхождения и годы употребления имени. Синоним — не запись: обозначение разрешается в запись-владельца (find, поиск), своей карточки у него нет.
type ValueColumn ¶ added in v0.0.7
ValueColumn — колонка значений строки поиска: код параметра каталога либо код атрибута (Attr — форма запроса attr.<код>). Коды передаются явно: модуль не знает о курируемом наборе колонок сайта.
func (ValueColumn) String ¶ added in v0.0.7
func (c ValueColumn) String() string
String — форма колонки запроса (attr.<код> для атрибутов) для сообщений об ошибках.
type VariantInput ¶
type VariantInput struct {
Label string
Sections []SectionInput
Attributes []catalog.AttributeValue
}
VariantInput — исполнение типа (D6): метка для карточки, собственные значения параметров по секциям групп и атрибуты исполнения — конструктивные признаки, различающиеся по исполнениям (план 03 §7/§10).