docs(sprint6): чек-лист — RowVersion, FluentValidation, Serilog, MediatR, 2FA
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
c43f68c39b
commit
406fcb9d7d
30
docs/sprint6-progress.md
Normal file
30
docs/sprint6-progress.md
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
# Спринт 6 — технический долг + 2FA
|
||||
|
||||
Автономная работа. После каждого пункта: `dotnet build` (SDK 8.0.126),
|
||||
unit + integration тесты, коммит порцией, отметка `[x]`, коммит прогресса.
|
||||
|
||||
Не ломать auth. НЕ трогать global.json/POS/nginx/ОФД.
|
||||
|
||||
## Чек-лист
|
||||
|
||||
1. [ ] **TD-6 Concurrency-токены на документах** — `RowVersion` (PostgreSQL
|
||||
`xmin` через `IsRowVersion`) на Supply/Demand/RetailSale/Transfer/Inventory.
|
||||
Миграция. EF concurrency check. 409 при конфликте. Тест: два параллельных
|
||||
PUT → один 200, другой 409.
|
||||
2. [ ] **TD-2 FluentValidation** — `FluentValidation.AspNetCore`, validator'ы
|
||||
для SupplyInputDto/RetailSaleInputDto/ProductInputDto/CounterpartyInputDto/
|
||||
EmployeeInputDto. Auto-register. Тесты на каждый.
|
||||
3. [ ] **TD-4 Структурные log-fields в Serilog** — `LogContext.PushProperty`
|
||||
в middleware: OrgId, UserId, CorrelationId. Бизнес-логи (Supply.Post,
|
||||
Sale.Post) — структурно. `docs/logging.md`.
|
||||
4. [ ] **TD-1 CQRS partial (MediatR)** — `CreateSupplyCommand`,
|
||||
`PostRetailSaleCommand`, `GetSalesReportQuery`. Показать паттерн, не
|
||||
полный рефакторинг. Тесты на handlers.
|
||||
5. [ ] **P2-4 2FA для админов (TOTP)** — `AuthenticatorTokenProvider`,
|
||||
endpoints `/api/me/2fa/enroll`, `/api/me/2fa/verify`, `/api/me/2fa/disable`.
|
||||
Опционально для Admin+SuperAdmin. При логине с включённым 2FA — два шага.
|
||||
|
||||
## Лог
|
||||
|
||||
- Каждый пункт: build + тесты + коммит порцией + отметка [x] + коммит прогресса.
|
||||
- Все правки на `main` (origin Forgejo), без коммита `global.json`.
|
||||
Loading…
Reference in a new issue