добавлен словарь категориальных значений HAE → коды HealthKit

- фазы сна, контекст пульса и имена тренировок попадают в реестр
  `category_value` (миграция 00010): строка хранится дословно, выведенный код
  лежит рядом отдельной записью, а не полем внутри точки
- словарь и синонимы кодов живут в бинаре (`internal/healthkit`); локаль из
  `Accept-Language` сужает поиск, но в ключ реестра не входит — заголовков в
  сыром архиве нет
- наблюдение входит в отпечаток витрины, выведенный код — нет: он производная
  от словаря, а не от журнала
This commit is contained in:
av
2026-08-04 07:32:19 +03:00
parent eb3fca77ee
commit 1b649ba3d5
40 changed files with 4317 additions and 42 deletions
+7 -2
View File
@@ -376,18 +376,23 @@ type DeliveryBody struct {
RawPath string
AutomationID string
Aggregation string
// Headers — заголовки запроса JSON-объектом. Разбору нужен ровно один из
// них, `Accept-Language`: он задаёт язык, на котором приехали
// категориальные строки, и сужает поиск по словарю. Колонки под язык нет
// намеренно — она была бы вторым домом факта, который уже лежит здесь.
Headers string
}
// DeliveryForParse возвращает сведения о доставке, нужные разбору.
func (s *Store) DeliveryForParse(ctx context.Context, id string) (DeliveryBody, error) {
const q = `
SELECT id, received_at, raw_path, automation_id, aggregation
SELECT id, received_at, raw_path, automation_id, aggregation, headers
FROM delivery WHERE id = ?`
var d DeliveryBody
var receivedAt string
err := s.db.QueryRowxContext(ctx, q, id).
Scan(&d.ID, &receivedAt, &d.RawPath, &d.AutomationID, &d.Aggregation)
Scan(&d.ID, &receivedAt, &d.RawPath, &d.AutomationID, &d.Aggregation, &d.Headers)
if errors.Is(err, sql.ErrNoRows) {
return DeliveryBody{}, ErrNotFound
}