service

package
v0.3.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 2, 2026 License: MIT Imports: 12 Imported by: 0

Documentation

Overview

Package service — публичный сервисный слой библиотеки и единственная точка входа для CLI, REST и встраивания в веб-бэкэнд: upsert записей, поиск, карточка, импорт/экспорт, операции с каталогом, производители (docs/plan/01-architecture.md §2.4).

Index

Constants

View Source
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

type AnalogInput struct {
	Designation string
	Note        string
}

AnalogInput — исходящая ссылка-аналог (D8): обозначение того же класса, опционально с заметкой характера замены в этом направлении.

type App

type App struct {
	// contains filtered or unexported fields
}

App — открытое приложение: хранилище, кэш каталога и сервисы. Безопасно для одновременного использования несколькими горутинами (stateless поверх пулов соединений; снимок каталога иммутабелен).

func Open

func Open(ctx context.Context, cfg Config) (*App, error)

Open открывает приложение по конфигурации: открывает хранилище, при EnsureCreated выполняет DDL и применяет сиды каталога на пустую базу (docs/plan/02-database.md §5.3), проверяет версию схемы (несовпадение — громкий отказ, продолжение работы запрещено).

func (*App) Close

func (a *App) Close() error

Close закрывает приложение (пулы соединений).

func (*App) Revisions

func (a *App) Revisions(ctx context.Context) (catalogRev, dataRev int64, err error)

Revisions возвращает текущие счётчики catalog_revision и data_revision (ETag REST — docs/plan/02-database.md §5.5).

func (*App) Services

func (a *App) Services() Services

Services возвращает набор сервисов приложения.

func (*App) Snapshot

func (a *App) Snapshot(ctx context.Context) (*catalog.Snapshot, error)

Snapshot возвращает актуальный снимок каталога (кэш с проверкой catalog_revision на каждом обращении).

func (*App) Stats

func (a *App) Stats(ctx context.Context) (Stats, error)

Stats собирает агрегаты приложения: снимок задаёт реестр классов (устройства вне реестра классов невозможны — движок валидации отвергает неизвестный класс), количества и ревизии — в одной транзакции чтения (согласованный снимок, без смешения состояний при конкурентной записи).

type AttributeFilter

type AttributeFilter struct {
	Attribute string
	Text      string
	Num       float64
	HasNum    bool
	Op        FilterOp
}

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).

func (*Card) FieldByName

func (c *Card) FieldByName(name string) (domain.Field, bool)

FieldByName ищет поле разбора обозначения в карточке по коду.

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

type CardGroup struct {
	Code    string
	Section string
	Values  []CardValue
}

CardGroup — группа каталога со значениями на карточке (отображаемое название — бандлы internal/i18n: group.<код> — D9).

type CardLink struct {
	Kind        domain.Kind
	System      domain.System
	Designation string
	Note        string
}

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

type CardSynonym struct {
	Designation string
	Note        string
	YearFrom    *int
	YearTo      *int
}

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

type CardTypeSibling struct {
	ID          int64
	System      domain.System
	Designation string
}

CardTypeSibling — запись группы типа: запись того же класса с тем же базовым обозначением (поле base), кроме самой записи карточки.

type CardTypeValue added in v0.0.4

type CardTypeValue struct {
	Designation string
	Value       CardValue
}

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

func (s *CatalogService) Import(ctx context.Context, in catalog.Input) error

Import применяет каталог upsert'ом по коду после валидации метасхемы (ApplyCatalog: вставка новой строки либо обновление полей; enum-значения, наборы условий и применимость параметров/атрибутов к классам замещаются целиком по строке; незаданные (нулевые) sort_order существующих строк сохраняются из снимка; привязки систем и правил к классам — только добавление; непустой список проблем — отказ целиком). Изменение каталога инкрементирует catalog_revision атомарно в той же транзакции.

func (*CatalogService) Snapshot

func (s *CatalogService) Snapshot(ctx context.Context) (*catalog.Snapshot, error)

Snapshot возвращает актуальный снимок каталога (кэш с проверкой 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

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 вне строгих грамматик), кандидаты пусты.

func (*DesignationService) Suggest

func (s *DesignationService) Suggest(ctx context.Context, prefix string, kind domain.Kind, limit int) ([]Suggestion, error)

Suggest возвращает обозначения по префиксу (канонизация префикса; подстрочный регистр не важен — хранятся канонические строки).

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) Count

func (s *DeviceService) Count(ctx context.Context, kind *domain.Kind) (int, error)

Count возвращает число записей (класса, если задан).

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

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) GetByID

func (s *DeviceService) GetByID(ctx context.Context, id int64) (*Card, bool, error)

GetByID возвращает карточку по стабильному id записи.

func (*DeviceService) GetByIDs

func (s *DeviceService) GetByIDs(ctx context.Context, ids []int64) ([]*Card, error)

GetByIDs возвращает карточки по списку стабильных id пакетным чтением дочерних таблиц (экспорт — без запросов на каждую запись): порядок результата — по порядку id входа, параллельно удалённые записи пропускаются.

func (*DeviceService) ListIDsByKind

func (s *DeviceService) ListIDsByKind(ctx context.Context, kind domain.Kind) ([]int64, error)

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

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 FilterOp

type FilterOp string

FilterOp — операция сравнения числового фильтра поиска.

const (
	OpEq  FilterOp = "eq"
	OpGte FilterOp = "gte"
	OpLte FilterOp = "lte"
)

Операции фильтров поиска.

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

type ParameterValueFreq struct {
	Text  string
	Count int
}

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

type SortField struct {
	Key     string
	Numeric bool
	Param   bool
	Desc    bool
}

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

type SourceRefInput struct {
	Code string
	Note string
}

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

func (s *SourceService) ListSources(ctx context.Context) ([]storage.SourceRow, error)

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

type Suggestion struct {
	Kind        domain.Kind
	System      domain.System
	Designation string
}

Suggestion — подсказка автодополнения по префиксу обозначения.

type SynonymInput added in v0.0.8

type SynonymInput struct {
	Designation string
	Note        string
	YearFrom    *int
	YearTo      *int
}

SynonymInput — историческое название записи (синоним, план 03 §9): обозначение, опционально заметка происхождения и годы употребления имени. Синоним — не запись: обозначение разрешается в запись-владельца (find, поиск), своей карточки у него нет.

type ValueColumn added in v0.0.7

type ValueColumn struct {
	Code string
	Attr bool
}

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).

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL