Xác minh mỗi thao tác quản lý Partner sinh đúng AuditEvent. Không thay đổi mô hình audit hiện tại
(AuditEventappend-only, bảngaudit_events) — Beta-4 chỉ dùng nó cho thao tác Partner.
AuditEvent — bất biến, append-only (không update/delete). Domain: packages/platform-domain/src/contexts/audit.PrismaAuditRepository.append (chỉ INSERT). Metadata sanitize ở domain: drop key nhạy cảm (secret/token/apikey/authorization/card/...) + chỉ giữ primitive ⇒ không rò secret/PHI.
AuditEvent.tenantId = partnerId; entityRef = partnerId (partner.*) / keyId (apikey.*). Actor = { kind:"authenticated", source:"ops_cli", role:"ops" }.
| Thao tác | Sinh audit action | Emit tại (code) |
|---|---|---|
| Partner created | partner.created | ProvisioningService.createPartner |
| Partner activated | partner.activated | activatePartner → transitionPartner |
| Partner suspended | partner.suspended | suspendPartner → transitionPartner |
| Partner re-activated | partner.reactivated | reactivatePartner → transitionPartner |
| API Key issued | apikey.issued | issueKey |
| API Key rotated | apikey.rotated | rotateKey |
| API Key revoked | apikey.revoked | revokeKey |
| (Partner revoked) | partner.revoked | revokePartner → transitionPartner |
src/__tests__/partner-management-e2e.test.ts chạy trọn luồng rồi assert cả 7 action tồn tại:
for (const a of ["partner.created","partner.activated","apikey.issued","apikey.rotated",
"partner.suspended","partner.reactivated","apikey.revoked"])
assert.ok(actions.has(a));
src/__tests__/ops-partner.test.ts xác minh chuỗi qua CLI (show-audit) + không lộ raw key trong audit. Cả hai chạy trong npm run test:infra → cổng CI platform-ci.yml.
npm run ops -- show-audit --partner <partnerId> --json
Kỳ vọng: mảng events theo thứ tự thời gian, mỗi phần tử { action, entityRef, actor, occurredAt, metadata }. Kiểm: đủ các action ở bảng trên; metadata chỉ chứa trường an toàn (fromStatus/toStatus/reason/environment/prefix/...), không có raw key.
Rủi ro: nếu tiến trình chết giữa update và append, có thể lệch. Đề xuất Beta-5: gói mỗi thao tác + audit trong prisma.$transaction (atomic). Chi tiết ở Release Report.