From 406fcb9d7d611aeffa2e5e0ab38f4f28613124a6 Mon Sep 17 00:00:00 2001 From: nns Date: Thu, 28 May 2026 17:00:27 +0500 Subject: [PATCH] =?UTF-8?q?docs(sprint6):=20=D1=87=D0=B5=D0=BA-=D0=BB?= =?UTF-8?q?=D0=B8=D1=81=D1=82=20=E2=80=94=20RowVersion,=20FluentValidation?= =?UTF-8?q?,=20Serilog,=20MediatR,=202FA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.7 --- docs/sprint6-progress.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 docs/sprint6-progress.md diff --git a/docs/sprint6-progress.md b/docs/sprint6-progress.md new file mode 100644 index 0000000..87e363c --- /dev/null +++ b/docs/sprint6-progress.md @@ -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`.