From c43f68c39bc2c715726ec2d1ed29f3439d07129b Mon Sep 17 00:00:00 2001 From: nns Date: Thu, 28 May 2026 16:47:32 +0500 Subject: [PATCH] =?UTF-8?q?docs(sprint5):=20TD-5=20done=20=E2=80=94=20?= =?UTF-8?q?=D0=B2=D1=81=D0=B5=204=20=D0=BF=D1=83=D0=BD=D0=BA=D1=82=D0=B0?= =?UTF-8?q?=20=D0=B2=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D1=8B,=20?= =?UTF-8?q?=D0=B8=D1=82=D0=BE=D0=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.7 --- docs/sprint5-progress.md | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/docs/sprint5-progress.md b/docs/sprint5-progress.md index 3226ab0..8c93488 100644 --- a/docs/sprint5-progress.md +++ b/docs/sprint5-progress.md @@ -35,10 +35,41 @@ query filter. E2E на изоляцию A vs B где применимо. `Resources/EmailTemplates/*.html` (Subject: первой строкой). Шаблоны: invite/weekly-summary/low-stock. Hangfire: weekly понедельник 07:00, low-stock ежедневно 08:00. 8 unit-тестов. -4. [ ] **TD-5 ImportJobRegistry в БД** — сейчас in-memory `ConcurrentDictionary`, +4. [x] **TD-5 ImportJobRegistry в БД** — сейчас in-memory `ConcurrentDictionary`, теряется при рестарте. Перевод на таблицу `ImportJobs` (Id, OrgId, Status, Progress, Total, StartedAt, FinishedAt, Errors JSON). Миграция. `MoySkladImportController` использует. Тесты. + ✅ `Domain.Integrations.ImportJob` (TenantEntity); миграция `Phase8c_ImportJobs`. + `ImportJobRegistry` теперь IServiceScopeFactory-backed: `Create` пишет + строку немедленно, `SaveAsync` обновляет, `Get/RecentlyFinished` читают + из БД. Контроллер `MoySkladImportController.RunInBackgroundAsync` дополнен + periodic flush через Timer (каждые 2 сек) + финальный flush в finally — + UI видит реальный прогресс, terminal-state сохраняется через рестарт. + 3 интеграционных теста (survives across scope, RecentlyFinished, tenant-isolation). + +## Итог + +**Все 4 пункта выполнены.** Спринт 5 завершён 2026-05-28. + +Сводка: +- **P1-5 Demand** — оптовая отгрузка контрагенту-юрлицу с `DemandPayment.Credit` + и `PaidAmount`-полем; 3 интеграционных. +- **P1-18 OrgAuditLog** — per-tenant журнал через `SaveChangesInterceptor`, + atomic с мутацией, diff в jsonb; 3 интеграционных. +- **P1-22 Email** — `IEmailSender.SendHtmlAsync` (multipart) + mustache-light + renderer + 3 шаблона + 2 recurring Hangfire-джоба; 8 unit. +- **TD-5 ImportJob** — persistence в БД, переживает рестарт, periodic flush + для live-прогресса; 3 интеграционных. + +**Сборка:** зелёная. +**Тесты:** 35 unit + 68 integration = **103 зелёных**. + +### Что осталось вне scope +- ОФД-оператор (нужен внешний участник: `Транском`/`Касса24`); +- MoySklad webhook-токены прод; +- WPF/POS UI (Windows-SDK); +- Стейдж→прод-деплой; +- Real SMTP-сервер для прод (Mailgun/Sendgrid/etc). ## Лог