diff --git a/docs/sprint5-progress.md b/docs/sprint5-progress.md index 9e3dc6d..3226ab0 100644 --- a/docs/sprint5-progress.md +++ b/docs/sprint5-progress.md @@ -25,10 +25,16 @@ query filter. E2E на изоляцию A vs B где применимо. Белый список типов: Supply/SupplierReturn/RetailSale/Demand/Product/ ProductPrice/ProductBarcode/Counterparty. Web `/audit-log` с фильтрами и diff-viewer'ом. Tenant-isolation через query-filter. 3 интеграционных. -3. [ ] **P1-22 Email-шаблоны** — расширить MailKit-сервис: +3. [x] **P1-22 Email-шаблоны** — расширить MailKit-сервис: `Resources/EmailTemplates/*.html`. Шаблоны: приглашение сотрудника с временным паролем (sendInvite=true), еженедельный summary владельцу (Hangfire recurring), low-stock alert (Hangfire daily). Тесты рендеринга. + ✅ `IEmailSender.SendHtmlAsync` (multipart/alternative с plain fallback); + `EmailTemplateRenderer` (mustache-light: `{{key}}` escape, `{{{raw}}}`, + `{{#key}}…{{/key}}` условие); `EmailTemplates` загружает embedded + `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`, теряется при рестарте. Перевод на таблицу `ImportJobs` (Id, OrgId, Status, Progress, Total, StartedAt, FinishedAt, Errors JSON). Миграция.