Appearance
Content And Asset Publishing — Business Rules
Tổng quan
Domain này gom các surface nội dung và asset marketing có tính "publish":
- post, page, post category
- banner, banner group
- highlight/label/read models công khai cho app
Đây là phần gần nhất với nghĩa CMS truyền thống. Tuy vậy trong code hiện tại, content publishing không chỉ là CRUD bài viết mà còn là lớp phân phối asset cho app/customer surfaces.
Scope nghiệp vụ
| Nhóm | Vai trò | Surface chính |
|---|---|---|
| Posts | Tin tức/bài viết nhiều ngôn ngữ, category, featured image, CTA | Posts, PostCreate, PostDetail |
| Pages | Trang tĩnh | Pages, PageCreate, PageDetail |
| Categories | Phân loại post | PostCategories, PostCategoryCreate, PostCategoryDetail |
| Banners | Asset marketing có subject_type, url, published_at | Banners, BannerCreate, BannerDetail |
| Banner groups | Gom banner theo placement/selection | BannerGroup*, BannerGroupDataTable |
| Highlight assets | app_highlight_feature*, label | DB/read-model phục vụ app surfaces |
Luồng chính
text
Content/IT tạo post hoặc page
-> nhập content đa ngôn ngữ
-> gắn category / labels / image / published_at
-> publish
-> app/public readers chỉ thấy record đã publish và chưa disabled
Marketing ops tạo banner
-> nhập media + subject_type + url + priority
-> gắn vào banner group
-> publish_at
-> user/customer app đọc qua banner views/functionsQuy tắc nghiệp vụ
| Mã | Quy tắc |
|---|---|
| BR-CAP-001 | post là content object đa ngôn ngữ; nội dung thật nằm trong post_content, còn record post giữ metadata publish-level. |
| BR-CAP-002 | Public visibility của post/banner đều phụ thuộc published_at và trạng thái disable; record chưa publish không được lộ cho anonymous/customer. |
| BR-CAP-003 | Post cho phép cấu hình allow_comment, allow_reaction, has_action_button, button_title, nên nó vừa là news content vừa có thể đóng vai trò CTA landing asset. |
| BR-CAP-004 | Banner không chỉ là hình ảnh; nó có subject_type, subject_id, url, priority, nghĩa là asset có thể điều hướng sang entity khác. |
| BR-CAP-005 | Banner group là lớp gom placement/selection cho banner; app không nhất thiết đọc trực tiếp banner thô mà có thể qua banner_user_view hoặc banner_current_user. |
| BR-CAP-006 | label và app_highlight_feature* cho thấy CMS còn giữ một nhánh lightweight content/highlight phục vụ app home surfaces, dù FE quản trị của nhánh này không nằm trọn trong route tree hiện tại. |
Boundary
| Boundary | Ghi chú |
|---|---|
notification | Notification route còn được kéo vào navigation marketing, nhưng không thuộc content publishing |
settings | Một số label/master data content-like nằm bên settings |
user / auth | Public/current-user views của banner/highlight phụ thuộc session hoặc published scope |
| mobile/app surfaces | banner_current_user, banner_user_view, app_highlight_feature_user_view là read models phục vụ client runtime |
Rủi ro / Findings
| Mức | Finding |
|---|---|
| P1 | Banner subtree vẫn có page/component đầy đủ nhưng route block của banner trong module.ts đang bị comment, nên coverage UI thật bị lệch với những gì file tree gợi ra. |
| P1 | page và post cùng sống trong CMS nhưng navigation đang ưu tiên post; page route không hiện trong menu marketing mặc định. |
| P2 | Ownership của app_highlight_feature nằm ở DB/functions nhưng không thấy admin surface tương ứng trong route tree hiện tại, dễ tạo vùng "có data nhưng khó truy vết quản trị". |