Help us shape the future of Go! Take the 2026 Go Developer Survey

components-catalog

module
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

README

components-catalog

Локальный и встраиваемый справочник электронных компонентов — советская и мировая элементная база. Проект - модуль веб-бэкенда: Go-библиотека с сервисным слоем, встраиваемый версионируемый REST API /api/v1 и консольная утилита catalogctl. Хранилища — SQLite и PostgreSQL, равноправные; всё на pure Go, без cgo. Лицензия — MIT.

Возможности

  • Пять классов приборов: транзисторы, диоды, резисторы, конденсаторы, реле.
  • Шесть систем обозначений: ГОСТ, ОСТ, PRO ELECTRON, JEDEC, JIS и other. Строгие грамматики разбирает код (с автодетектом класса и системы); бессистемные имена (включая досистемные семейства МЛТ, ВС, КСО…) — other с классификацией секцией fields.
  • Каталожные данные: электрические параметры с условиями измерения, предельные эксплуатационные данные, массогабаритные и описательные атрибуты. Состав каталога (параметры, атрибуты, условия, enum-значения) — данные в БД: расширяется файлами наполнения без правки кода и пересборки; движок валидации читает правила из БД.
  • Исполнения-варианты: зависимости «номинал × напряжение → габариты» (К50-35) и ряды мощностей (С2-33Н) — внутри одной записи.
  • Направленные аналоги: ссылки «чем заменить» с заметками; «B заменяет A» не означает обратного.
  • Поиск: подстрока обозначения, сквозные между системами словарные фильтры (материал, подкласс, подстройка, категория), фильтры по полям обозначения, атрибутам и границам параметров, сортировка, пагинация.
  • Импорт/экспорт: jsonc, yaml, ndjson; идемпотентный импорт и round-trip экспорт.
  • Локализация на краю: база и формат наполнения хранят только коды; отображаемые строки — бандлы (en — канонический, ru — полный). REST — Accept-Language, CLI — --lang.
  • Простое хранилище: схема создаётся целиком при открытии, миграций нет; рассинхрон кода и базы исключён версией схемы.

Поддерживаемые приборы

Класс Код Примеры из data/
Транзисторы transistor КТ315Б, ГТ109Г, BC547B, 2N3055, 2SC1815, IRF540
Диоды diode Д226, КС168А, 1N4148, BZX85C5V1, BAT54S, KBP206G
Резисторы resistor С2-33Н, МЛТ-0.5, СП3-19А, ПЭВ-10, CFR-25
Конденсаторы capacitor К50-35, К10-17Б, КСО-2, GRM188R71H104KA93D, T491C476K016AT
Реле relay РЭС-9, РЭС-15, РЭС-34, РПС-32, МКУ-48-С, КДР-1, G5V-1, G2R-2

Системы обозначений: gost, ost, pro, jedec, jis, other (бессистемные имена — включая досистемные семейства МЛТ, ВС, КСО…; семейство/номер/буквы — явные поля fields, справочник семейств — docs/class-keys.md §12). Обозначение — точный ключ записи в пределах класса: КТ315Б и 2Т315Б — разные записи.

Быстрый старт (CLI)

go build ./cmd/catalogctl

catalogctl init --db catalog.db
for f in data/*.jsonc; do catalogctl import "$f" --db catalog.db; done

catalogctl list --kind transistor --q КТ3 --db catalog.db   # поиск по подстроке
catalogctl list --material si --subclass bjt --db catalog.db # словарные фильтры
catalogctl info КТ315Б --db catalog.db                       # карточка
catalogctl find 2Т315Б --db catalog.db                       # подсказка: КТ315Б
catalogctl export --format ndjson --db catalog.db            # round-trip экспорт
Команды catalogctl
Команда Назначение
init создать и инициализировать базу (сиды каталога)
parse <обозначение>… разбор обозначений, автодетект класса и системы
add <обозначение>… добавить записи-обозначения
import <файл> [--dry-run] импорт файла наполнения (- — stdin)
list [фильтры] список записей: --kind --system --material --subclass --adjustment --category --q --limit --offset и др.
info <обозначение> карточка записи
find <обозначение> точный поиск; подсказка равнозначного обозначения (ГОСТ)
delete <обозначение>… каскадное удаление
count [--kind] число записей
export [--kind] [--format] экспорт записей (jsonc | yaml | ndjson)
catalog export | import | list экспорт каталога, расширение, справочник параметров
version версия сборки
help [команда] справка; help <команда> — строка использования и опции команды

Общие опции: --dialect sqlite|postgres, --db <путь> (по умолчанию catalog.db), --dsn <строка>, --lang en|ru, --dry-run. Полная справка — catalogctl help.

Встраивание (Go API)

Публичный фасад — пакет components (план 01 §2.4): модуль не запускает серверов и не читает глобальных флагов и env — сайт создаёт App при старте и закрывает при завершении. Импортируется только components; пакеты internal/ внешнему модулю недоступны, типы сервисного слоя открыты алиасами.

import "github.com/billydos/components-catalog/components"

app, err := components.Open(ctx, components.Config{
	Dialect:       "sqlite", // "sqlite" | "postgres"
	DSN:           "catalog.db",
	EnsureCreated: true, // DDL + сиды каталога на пустую базу
})
if err != nil { … }
defer app.Close()

// сервисный слой: Devices / Designations / Catalog
page, err := app.Services.Devices.Search(ctx, components.SearchQuery{
	Kind:  components.KindTransistor,
	Query: "КТ3",
})

// импорт файла наполнения (jsonc/yaml/ndjson; формат — по расширению);
// опция WithProgress — колбэк прогресса больших файлов (NDJSON читается
// построчно, без загрузки целиком)
file, err := os.Open("fill.jsonc")
if err != nil { … }
defer file.Close()
rep, err := app.Importer.Import(ctx, file, "fill.jsonc", false,
	components.WithProgress(func(p components.Progress) { … }))

// ошибки — значения: машиночитаемый код + сообщение
if de, ok := components.AsError(err); ok { … de.Code … }

Готовый runnable-пример — examples/embed: внешний модуль с replace на локальный путь; его сборка и запуск — фаза consumer QA-прогонщика (компилируемость у внешнего потребителя — часть контракта).

REST API

app.Handler() возвращает обычный http.Handler REST /api/v1 — монтируется в любой роутер сайта. Аутентификация, авторизация, rate limiting и CORS — на стороне сайта (запись монтируется только в защищённые маршруты).

mux := http.NewServeMux()
mux.Handle("/api/v1/", app.Handler())
// опции REST — в components.Config:
// DisableSuggest: true — не монтировать GET /suggest
// Metrics:        myMetrics — хук счётчиков сайта
Маршрут Назначение
GET /kinds классы приборов
GET /catalog снимок каталога для построения форм (ETag по catalog_revision)
GET /components поиск: подстрока q, фильтры material / subclass / adjustment / category (код или локализованное название), attr.<код>, par.<код>.min/.max/.exact, sort, limit ≤ 200, offset (ETag по data_revision)
GET /components/{kind}/{designation} карточка записи
GET /components/id/{id} карточка по стабильному id — для обозначений с / (MIL M39003/…)
POST /components создание записи
PUT /components/{kind}/{designation} upsert записи
DELETE /components/{kind}/{designation} удаление
GET /suggest автодополнение по префиксу
GET /parse?designation=&system=&kind= разбор обозначения: автодетект либо явная система/класс + кандидаты строгих систем
GET /changes?after=&limit= поток событий изменений (created/updated/deleted) для инкрементальной синхронизации индексов сайта
GET /stats количества по классам, версия схемы, ревизии; ?kind=<код> — фасетные агрегаты класса: min/max численных параметров (границы — как у фильтров поиска) и частоты текстовых/enum значений
POST /import импорт файла наполнения; формат тела — обязательный заголовок Content-Type (application/x-ndjson, application/json — jsonc, application/yaml): NDJSON — потоково без потолка тела, jsonc/yaml — документ целиком с потолком 16 МиБ (превышение — 400 invalid_import_file); синхронный отчёт после EOF, проблемы — в отчёте; ?dry_run=true — контрольный прогон без записи; жёсткая ошибка — только синтаксис формата и чтение потока (400)

Ошибки — JSON {"code", "message"} со статусами 400/404/409/422/500. Отображаемые поля (name, kind_name, символы единиц, тексты ошибок) заполняются по Accept-Language (по умолчанию en); кодовые поля (kind, system, unit…) и коды ошибок от локали не зависят. Полный контракт — api/openapi.yaml (OpenAPI 3.1; совпадение с реализацией закреплено тестом).

Наполнение

Формат Расширения Назначение
jsonc .jsonc, .json ручное редактирование и ревью (комментарии //)
yaml .yaml, .yml ручное редактирование
ndjson .ndjson машинный поток больших объёмов (10⁴–10⁵ записей)

Семантика секций записи (fields, attributes, группы параметров, manufacturers, variants, analogs, synonyms): отсутствует — не менять, задана — заменить целиком, ошибка в любом значении — запись не применяется вовсе. Импорт идемпотентен: повторный прогон того же файла — «без изменений» по всем записям, без инкремента ревизий. Каталог расширяется секцией catalog того же файла — без правки кода.

Выверенное наполнение лежит в data/ (все классы и системы обозначений, матрица исполнений К50-35, ряды мощностей резисторов, паспорта обмоток реле, направленные аналоги); источники по каждой записи — docs/plan/08-data-verification.md. Регламент наполнения — docs/fill-format.md, сводные ключи по классам — docs/class-keys.md.

Сборка и проверка

go build ./... && go vet ./... && gofmt -l . && go test ./...
go run ./qa/runner     # кроссплатформенный QA: статика + сценарии CLI/REST, отчёт qa/reports/*.log

Прогонщик QA работает на Linux, macOS и Windows (SQLite всегда; PostgreSQL — через CATALOG_TEST_POSTGRES_DSN; нагрузочная прикидка — -scale/CATALOG_QA_SCALE). CI (.github/workflows/ci.yml) выполняет его на Linux со службой PostgreSQL и прикидкой 10⁴ и на Windows.

Производительность

Ориентиры: поиск с фильтрами ≤ 100 мс, карточка ≤ 20 мс на 10⁴–10⁵ записей. Подтверждено прикидкой на 10⁴ (SQLite, локально); известное превышение — фильтрованный поиск (EXISTS по EAV) на SQLite при 10⁵. Детали и план Б — qa/reports/2026-10-02-stage7.md.

Документация

Путь Содержимое
docs/plan/ архитектура и контракты: решения D1–D10, разделы плана, отчёты выверки
docs/fill-format.md регламент наполнения: формат, семантика секций, типичные ошибки
docs/class-keys.md сводный справочник ключей по классам приборов
api/openapi.yaml контракт REST (OpenAPI 3.1)
data/ выверенное наполнение
qa/ сквозные сценарии, нагрузочная прикидка, отчёты прогонов

Лицензия

MIT.

Directories

Path Synopsis
cmd
catalogctl command
Команда catalogctl — консольная утилита администрирования справочника (init, import, add, list, info, find, delete, count, parse, export, catalog).
Команда catalogctl — консольная утилита администрирования справочника (init, import, add, list, info, find, delete, count, parse, export, catalog).
Package components — публичный фасад библиотеки для встраивания (docs/plan/01-architecture.md §2.4, docs/plan/04-module-functionality.md §1): тонкий реэкспорт внутреннего сервисного слоя, импортёра файлов наполнения и REST /api/v1 — вместе с типами domain и catalog из их сигнатур — без перестройки слоёв.
Package components — публичный фасад библиотеки для встраивания (docs/plan/01-architecture.md §2.4, docs/plan/04-module-functionality.md §1): тонкий реэкспорт внутреннего сервисного слоя, импортёра файлов наполнения и REST /api/v1 — вместе с типами domain и catalog из их сигнатур — без перестройки слоёв.
internal
catalog
Package catalog обеспечивает доступ к каталожным таблицам (параметры, атрибуты, условия, единицы, группы, именованные правила, системы обозначений, реестр семейств) и содержит движок валидации значений по правилам из БД.
Package catalog обеспечивает доступ к каталожным таблицам (параметры, атрибуты, условия, единицы, группы, именованные правила, системы обозначений, реестр семейств) и содержит движок валидации значений по правилам из БД.
cli
Package cli — команды и вывод консольной утилиты catalogctl.
Package cli — команды и вывод консольной утилиты catalogctl.
domain
Package domain содержит базовые понятия справочника: классы приборов, системы обозначений и их разбор, единицы (коды), материалы и ошибки.
Package domain содержит базовые понятия справочника: классы приборов, системы обозначений и их разбор, единицы (коды), материалы и ошибки.
httpapi
Package httpapi — версионируемый REST API /api/v1 на net/http, монтируемый в роутер сайта.
Package httpapi — версионируемый REST API /api/v1 на net/http, монтируемый в роутер сайта.
i18n
Package i18n — бандлы отображаемых строк каталога (решение D9, docs/plan/01-architecture.md §2.6).
Package i18n — бандлы отображаемых строк каталога (решение D9, docs/plan/01-architecture.md §2.6).
importer
Package importer — реестр форматов наполнения (jsonc/json, yaml/yml, ndjson): упорядоченное дерево значений, семантика секций, Issues-модель и дословные тексты ошибок формата (docs/plan/01-architecture.md §2.5).
Package importer — реестр форматов наполнения (jsonc/json, yaml/yml, ndjson): упорядоченное дерево значений, семантика секций, Issues-модель и дословные тексты ошибок формата (docs/plan/01-architecture.md §2.5).
service
Package service — публичный сервисный слой библиотеки и единственная точка входа для CLI, REST и встраивания в веб-бэкэнд: upsert записей, поиск, карточка, импорт/экспорт, операции с каталогом, производители (docs/plan/01-architecture.md §2.4).
Package service — публичный сервисный слой библиотеки и единственная точка входа для CLI, REST и встраивания в веб-бэкэнд: upsert записей, поиск, карточка, импорт/экспорт, операции с каталогом, производители (docs/plan/01-architecture.md §2.4).
storage
Package storage — переносимое реляционное ядро на database/sql с двумя диалектами: sqlite (modernc.org/sqlite) и postgres (pgx/v5 stdlib).
Package storage — переносимое реляционное ядро на database/sql с двумя диалектами: sqlite (modernc.org/sqlite) и postgres (pgx/v5 stdlib).
testutil
Package testutil — общий код интеграционных тестов: доступ к локальному PostgreSQL (CATALOG_TEST_POSTGRES_DSN, прогон опционален) и очистка одноразовой базы между тестами.
Package testutil — общий код интеграционных тестов: доступ к локальному PostgreSQL (CATALOG_TEST_POSTGRES_DSN, прогон опционален) и очистка одноразовой базы между тестами.
qa
Package qa — прогоны QA: кроссплатформенный прогонщик qa/runner (сборка, статические проверки, сквозные сценарии CLI и REST на SQLite и PostgreSQL, структурный отчёт qa-log/1) и нагрузочная прикидка против ориентиров производительности (load_test.go).
Package qa — прогоны QA: кроссплатформенный прогонщик qa/runner (сборка, статические проверки, сквозные сценарии CLI и REST на SQLite и PostgreSQL, структурный отчёт qa-log/1) и нагрузочная прикидка против ориентиров производительности (load_test.go).
restsrv command
Команда restsrv — минимальный хост REST /api/v1 для сквозных сценарных прогонов (qa/runner).
Команда restsrv — минимальный хост REST /api/v1 для сквозных сценарных прогонов (qa/runner).
runner command
Сценарии CLI: сквозной прогон catalogctl против ноги прогона (sqlite или postgres).
Сценарии CLI: сквозной прогон catalogctl против ноги прогона (sqlite или postgres).
Package seed — стартовые сиды каталога (docs/plan/03-data-model.md §3–§11): единицы, условия, группы параметров, именованные правила, системы обозначений и применимость к классам, параметры и атрибуты пяти классов с применимостью (parameter_kinds/attribute_kinds — D7).
Package seed — стартовые сиды каталога (docs/plan/03-data-model.md §3–§11): единицы, условия, группы параметров, именованные правила, системы обозначений и применимость к классам, параметры и атрибуты пяти классов с применимостью (parameter_kinds/attribute_kinds — D7).

Jump to

Keyboard shortcuts

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