food-market/tests/food-market.UnitTests
nns a189a5dd6e feat(audit): per-tenant журнал мутаций OrgAuditLog (P1-18)
Domain OrgAuditLog (TenantEntity) - per-org журнал create/update/delete
для Supply/SupplierReturn/RetailSale/Demand/Product/ProductPrice/
ProductBarcode/Counterparty (белый список в IsTracked).

Реализация: OrgAuditInterceptor (SaveChangesInterceptor) снимает diff на
SavingChanges (до commit), пишет в тот же DbContext в той же транзакции -
атомарно с самой мутацией. ChangesJson формата
{ "field": { "before": X, "after": Y } } - служебные поля
(OrganizationId/CreatedAt/UpdatedAt) пропускаются.

ITenantContext получил UserId (sub claim) для атрибуции событий.
AppDbContext.SkipAudit - escape-hatch для сидеров/системных операций.

Tenant-isolation: query-filter обычный TenantEntity-фильтр. B не видит
audit-строки A; SuperAdmin без override видит всё.

Контроллер GET /api/admin/audit-log с фильтрами entityType / entityId /
userId / action / from / to. Permission OrgSettingsManage.
Web: /audit-log для Admin'а - таблица с раскрывающимся JSON diff'ом,
цветные плашки create/update/delete, фильтры по типу и действию.

Миграция Phase8b_OrgAuditLog: jsonb-колонка, индексы
(OrgId+CreatedAt), (OrgId+EntityType+EntityId), (OrgId+UserId+CreatedAt).

Тесты: 3 интеграционных (create Product создаёт audit-запись;
update Counterparty - diff содержит before/after; tenant-изоляция:
B не видит записи A).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 16:26:36 +05:00
..
Support feat(audit): per-tenant журнал мутаций OrgAuditLog (P1-18) 2026-05-28 16:26:36 +05:00
food-market.UnitTests.csproj feat(pos-shared): контракты POS v1 в food-market.shared (P1-12a) 2026-05-28 12:03:04 +05:00
HousekeepingJobsTests.cs feat(hangfire): dashboard + scheduled cleanup джобы (P1-16) 2026-05-28 10:07:14 +05:00
MovingAverageCostTests.cs test(unit): xUnit-проект food-market.UnitTests, 23 теста (P1-20) 2026-05-27 03:01:56 +05:00
PosContractsTests.cs feat(pos-shared): контракты POS v1 в food-market.shared (P1-12a) 2026-05-28 12:03:04 +05:00
RetailPaymentValidatorTests.cs test(unit): xUnit-проект food-market.UnitTests, 23 теста (P1-20) 2026-05-27 03:01:56 +05:00
StockServiceTests.cs test(unit): xUnit-проект food-market.UnitTests, 23 теста (P1-20) 2026-05-27 03:01:56 +05:00
TenantQueryFilterTests.cs test(unit): xUnit-проект food-market.UnitTests, 23 теста (P1-20) 2026-05-27 03:01:56 +05:00