Skip to content

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ómVai tròSurface chính
PostsTin tức/bài viết nhiều ngôn ngữ, category, featured image, CTAPosts, PostCreate, PostDetail
PagesTrang tĩnhPages, PageCreate, PageDetail
CategoriesPhân loại postPostCategories, PostCategoryCreate, PostCategoryDetail
BannersAsset marketing có subject_type, url, published_atBanners, BannerCreate, BannerDetail
Banner groupsGom banner theo placement/selectionBannerGroup*, BannerGroupDataTable
Highlight assetsapp_highlight_feature*, labelDB/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/functions

Quy tắc nghiệp vụ

Quy tắc
BR-CAP-001post 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-002Public 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-003Post 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-004Banner 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-005Banner 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-006labelapp_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

BoundaryGhi chú
notificationNotification route còn được kéo vào navigation marketing, nhưng không thuộc content publishing
settingsMột số label/master data content-like nằm bên settings
user / authPublic/current-user views của banner/highlight phụ thuộc session hoặc published scope
mobile/app surfacesbanner_current_user, banner_user_view, app_highlight_feature_user_view là read models phục vụ client runtime

Rủi ro / Findings

MứcFinding
P1Banner 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.
P1pagepost 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.
P2Ownership 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ị".