docs(sprint5): TD-5 done — все 4 пункта выполнены, итог

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
nns 2026-05-28 16:47:32 +05:00
parent b963adfa2e
commit c43f68c39b

View file

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