docs(sprint6): P2-4 done — все 5 пунктов выполнены, итог
Some checks failed
CI / Backend (.NET 8) (push) Waiting to run
CI / Web (React + Vite) (push) Waiting to run
CI / POS (WPF, Windows) (push) Waiting to run
Docker API / Build + push API (push) Waiting to run
Docker API / Deploy API on stage (push) Blocked by required conditions
Docker Web / Build + push Web (push) Waiting to run
Docker Web / Deploy Web on stage (push) Blocked by required conditions
Docker Public / Build + push Public (push) Has been cancelled
Docker Public / Deploy Public on stage (push) Has been cancelled

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
nns 2026-05-28 17:59:47 +05:00
parent 7b7a7091b9
commit 4675f38a0f

View file

@ -37,9 +37,39 @@ unit + integration тесты, коммит порцией, отметка `[x]`
`food-market.application`. 3 handler-образца с абстракциями
(`ISupplyWriter`, `IRetailSalePoster`) — testable без EF/БД.
Контроллеры остались на прежнем flow (поэтапная миграция). 6 unit-тестов.
5. [ ] **P2-4 2FA для админов (TOTP)**`AuthenticatorTokenProvider`,
5. [x] **P2-4 2FA для админов (TOTP)**`AuthenticatorTokenProvider`,
endpoints `/api/me/2fa/enroll`, `/api/me/2fa/verify`, `/api/me/2fa/disable`.
Опционально для Admin+SuperAdmin. При логине с включённым 2FA — два шага.
✅ Identity `AuthenticatorTokenProvider` (RFC 6238). Endpoints:
/api/me/2fa/{status, enroll, verify, disable} с QR-URI. Password-grant
на `/connect/token` принимает custom param `otp_code`; при включённом
2FA без него — `invalid_grant` с `error_description=2fa_required`.
4 интеграционных теста (тест сам генерит TOTP через RFC 6238).
## Итог
**Все 5 пунктов выполнены.** Спринт 6 завершён 2026-05-28.
Сводка:
- **TD-6 RowVersion** — Postgres `xmin` через `UseXminAsConcurrencyToken`
на 5 документах, 409 при conflict. Bonus: исправил Supply.Update.
- **TD-2 FluentValidation**`ValidationFilter` + 5 validator'ов
(Supply, RetailSale, Product, Counterparty, Employee).
- **TD-4 Structured logging**`LogEnrichmentMiddleware` (OrgId/UserId/
CorrelationId в LogContext), business-логи на Post-операциях.
- **TD-1 CQRS partial** — MediatR + 3 handler-образца с testable-абстракциями.
- **P2-4 TOTP 2FA** — endpoints + интеграция в password-grant.
**Сборка:** зелёная.
**Тесты:** 57 unit + 74 integration = **131 зелёных**.
### Что осталось вне scope автономной работы
- ОФД-оператор (`Транском`/`Касса24`),
- MoySklad webhook-токены прод,
- WPF/POS UI на Windows,
- Стейдж→прод-деплой,
- Реальный SMTP-провайдер прод (Mailgun/Sendgrid),
- Backup-коды для 2FA recovery (отдельная задача).
## Лог