docs(sprint4): P1-17 done — все 3 пункта выполнены, итог

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
nns 2026-05-28 12:20:50 +05:00
parent 824ef8279c
commit d3355a9445

View file

@ -25,11 +25,45 @@
+ ClientSaleId через маркер `pos:GUID32` в `RetailSale.Notes`. Pre-flight
на остатки — недостающие позиции попадают в `Failed`, остальные проводятся.
7 интеграционных тестов.
3. [ ] **P1-17 Метрики Prometheus**`prometheus-net.AspNetCore`, `/metrics`.
3. [x] **P1-17 Метрики Prometheus**`prometheus-net.AspNetCore`, `/metrics`.
`http_requests_total`, `http_request_duration_seconds`,
`db_query_duration_seconds` (через EF interceptor), бизнес:
`sales_posted_total`, `supplies_posted_total`, `documents_error_total`.
`docs/observability.md` с образцом Grafana dashboard.
`prometheus-net.AspNetCore@8.2.1` + `DbMetricsInterceptor` (singleton,
EF Core `DbCommandInterceptor`). Бизнес-счётчики в `AppMetrics`
инкрементятся в успешных Post'ах Sales/Supplies/POS. Endpoint
`/metrics` без auth. `docs/observability.md` с scrape-конфигом,
образцом Grafana и alert-rules (HighErrorRate / DbSerializationContention /
NoSalesIn30Min). 3 интеграционных теста.
## Итог
**Все 3 пункта выполнены.** Спринт 4 (POS Sync API + observability) завершён 2026-05-28.
Сводка:
- **P1-12a Контракты POS**`food-market.shared/Pos/V1/SyncDtos.cs`, версионирование
через namespace, двойная идемпотентность, 3 unit-теста.
- **P1-12b POS Sync API**`/api/pos/v1/sync` + `/api/pos/v1/sales` с batch-
идемпотентностью (`PosBatchAck`) + per-sale (`ClientSaleId` через `Notes`).
7 интеграционных тестов.
- **P1-17 Prometheus**`/metrics`, EF interceptor, бизнес-счётчики,
`docs/observability.md` с Grafana/alerts. 3 интеграционных теста.
**Сборка:** зелёная.
**Тесты:** 27 unit + 59 integration (49 sprint3 + 7 POS + 3 Metrics) **зелёные**.
**Web:** не трогали в этом спринте.
### POS-side notes
WPF/POS UI (`food-market.pos`, net8.0-windows) собирается только на Windows
с Windows SDK — оставлен как отдельный шаг на Windows-машине. Сервер
готов принимать кассу через `/api/pos/v1/*`.
### Что не сделано в спринте (требует внешних участников)
- ОФД-интеграция (нужен оператор данных — `Транском`/`Касса24`);
- MoySklad webhook-токены (production-grade приёмка нотификаций);
- Прод-деплой stage→prod (нужен пользователь для проверки stage сначала);
- WPF/POS UI (Windows-машина с SDK).
## Лог