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
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:
parent
7b7a7091b9
commit
4675f38a0f
|
|
@ -37,9 +37,39 @@ unit + integration тесты, коммит порцией, отметка `[x]`
|
||||||
`food-market.application`. 3 handler-образца с абстракциями
|
`food-market.application`. 3 handler-образца с абстракциями
|
||||||
(`ISupplyWriter`, `IRetailSalePoster`) — testable без EF/БД.
|
(`ISupplyWriter`, `IRetailSalePoster`) — testable без EF/БД.
|
||||||
Контроллеры остались на прежнем flow (поэтапная миграция). 6 unit-тестов.
|
Контроллеры остались на прежнем 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`.
|
endpoints `/api/me/2fa/enroll`, `/api/me/2fa/verify`, `/api/me/2fa/disable`.
|
||||||
Опционально для Admin+SuperAdmin. При логине с включённым 2FA — два шага.
|
Опционально для 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 (отдельная задача).
|
||||||
|
|
||||||
## Лог
|
## Лог
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue