Files
healthlog/internal/ident/ident.go
T
av 41f2f05f2f добавлен приём пакетов Health Auto Export
- POST /api/v1/ingest: токен, лимит тела, gzip, durable-запись тела в сырой
  архив, учёт доставки в SQLite
- код ответа отражает доставку, а не разбор: битый JSON — 400, непонятое
  содержимое — 200, данные уже сохранены и доразберутся позже
- сохраняется полный набор заголовков запроса с вычисткой секретов по имени
  и по совпадению значения с токеном
2026-08-01 12:37:17 +03:00

36 lines
1.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Package ident — единая точка генерации и разбора идентификаторов (ULID).
//
// ULID сортируется по времени создания, компактен в логах и URL (без дефисов)
// и глобально уникален across сущностей: поиск по голому id находит все
// упоминания. Канонический вид — нижний регистр.
package ident
import (
"errors"
"fmt"
"strings"
"github.com/oklog/ulid/v2"
)
// ErrInvalid — синтаксически некорректный идентификатор. Такой id трактуем
// как несуществующую сущность, без похода в БД.
var ErrInvalid = errors.New("некорректный идентификатор")
// NewID возвращает новый ULID в нижнем регистре.
func NewID() string {
return strings.ToLower(ulid.Make().String())
}
// Parse валидирует внешний идентификатор и приводит его к каноническому виду.
// Вызывается на входных границах (HTTP, CLI) до запроса к БД: сравнение строк
// в SQLite побайтовое, а base32 ULID при декодировании нечувствителен к
// регистру.
func Parse(s string) (string, error) {
id, err := ulid.ParseStrict(strings.ToUpper(strings.TrimSpace(s)))
if err != nil {
return "", fmt.Errorf("%w: %q", ErrInvalid, s)
}
return strings.ToLower(id.String()), nil
}