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). ## Лог