Catalog: SDD
PRD · Tests · trạng thái: đã xây cho email; chưa có danh mục cho kênh khác
| Thành phần | File | Ghi chú |
|---|---|---|
EmailKind | api.conan.school/src/shared/email/templates.ts | Union đóng, 19 loại: login_code, bốn loại membership_*, event_registered, class_enrolled, community_pro_activated, certificate_issued, welcome_member, community_joined, event_reminder, learning_nudge, community_weekly, pro_expiring, profile_incomplete, ops_daily_report, ops_weekly_report, media_quote. |
EmailCatalogEntry | cùng file | kind, name, trigger, purpose, sample, render(data) trả { subject, html, text }. |
EMAIL_CATALOG, EMAIL_KINDS | cùng file | Record<EmailKind, EmailCatalogEntry>; Record buộc mọi loại có mục. |
ENGAGEMENT_KINDS, isEngagementKind | cùng file | Bốn loại gắn kết: learning_nudge, community_weekly, pro_expiring, profile_incomplete. Còn lại là giao dịch. |
auditCopyAppliesTo(kind) | api.conan.school/src/shared/email/send.ts | Export để admin hỏi đúng hàm máy chủ dùng, không tự tính lại. |
| API công khai | GET /api/system/email/catalog (src/domains/system/index.ts) | Chỉ metadata, không nội dung mẫu. |
| API admin | GET /api/admin/emails/catalog (src/domains/admin/emails.ts) | Cho trang admin. |
| Gửi thử | POST /api/system/email/smoke | Gác bằng header x-email-smoke-token so với bí mật EMAIL_SMOKE_TOKEN; không đặt bí mật thì đóng. Khoá KV email-smoke:<địa chỉ> 10 phút; tối đa 10 thư. |
| Admin | admin.conan.school/legacy/admin-trial/src/pages/EmailCatalogPage.tsx, khai ở admin.conan.school/src/nav.ts đường /community/email/catalog |
Không có danh mục cho in-app hay kênh khác: các kênh đó chưa tồn tại.