Skip to content

CMS - Technical Map

Auto-generated bởi codebase-doc-generator ngày 2026-03-23 (verified từ code thực). Không chỉnh sửa thủ công.

Routes

Content

RoutePathMục đích
ROUTE_PAGE/cms/pageDanh sách pages
ROUTE_PAGE_CREATE/cms/page/createTạo page
ROUTE_PAGE_DETAIL/cms/page/:idChi tiết page
ROUTE_POST/cms/postDanh sách posts
ROUTE_POST_CREATE/cms/post/createTạo post
ROUTE_POST_DETAIL/cms/post/:idChi tiết post
ROUTE_POST_UPDATE/cms/post/:id/editSửa post
ROUTE_POST_UPDATE_IN_DETAIL/cms/post/:id/update-in-detailSửa post khi đang ở detail
ROUTE_POST_CATEGORY/cms/post-categoryDanh sách category
ROUTE_POST_CATEGORY_CREATE/cms/post-category/createTạo category
ROUTE_POST_CATEGORY_DETAIL/cms/post-category/:idChi tiết category

Campaign / Voucher

RoutePathMục đích
ROUTE_CAMPAIGN/cms/campaignDanh sách campaign
ROUTE_CAMPAIGN_CREATE/cms/campaign/createTạo campaign
ROUTE_CAMPAIGN_DETAIL/cms/campaign/:idChi tiết campaign
ROUTE_CAMPAIGN_UPDATE/cms/campaign/:id/editSửa campaign
ROUTE_VOUCHER_MANAGEMENT/cms/voucher-managementContainer voucher management
ROUTE_VOUCHER/cms/voucher-management/voucherTab voucher overview
ROUTE_VOUCHER_CREATE/cms/voucher-management/voucher/createTạo voucher
ROUTE_VOUCHER_DETAIL/cms/voucher-management/voucher/:idChi tiết voucher
ROUTE_VOUCHER_UPDATE/cms/voucher-management/voucher/:id/editSửa voucher
ROUTE_VOUCHER_CAMPAIGN/cms/voucher-management/voucher-campaignOverview voucher campaign
ROUTE_VOUCHER_CAMPAIGN_CREATE/cms/voucher-management/voucher-campaign/createTạo voucher campaign
ROUTE_VOUCHER_CAMPAIGN_DETAIL/cms/voucher-management/voucher-campaign/:idChi tiết voucher campaign
ROUTE_VOUCHER_CAMPAIGN_UPDATE/cms/voucher-management/voucher-campaign/:id/editSửa voucher campaign

Events

RoutePathMục đích
ROUTE_EVENT/cms/eventContainer event
ROUTE_ACCUMULATION_EVENT/cms/event/accumulationOverview accumulation
ROUTE_ACCUMULATION_EVENT_CREATE/cms/event/accumulation/createTạo accumulation event
ROUTE_ACCUMULATION_EVENT_DETAIL/cms/event/accumulation/:idChi tiết accumulation event
ROUTE_ACCUMULATION_EVENT_UPDATE/cms/event/accumulation/:id/editSửa accumulation event
ROUTE_ACCUMULATION_EVENT_CUSTOMER_DETAIL/cms/event/accumulation/:id/:customerIdChi tiết khách trong accumulation
ROUTE_LUCKY_DRAW_EVENT/cms/event/lucky-drawOverview lucky draw
ROUTE_LUCKY_DRAW_EVENT_CREATE/cms/event/lucky-draw/createTạo lucky draw
ROUTE_LUCKY_DRAW_EVENT_DETAIL/cms/event/lucky-draw/:idChi tiết lucky draw
ROUTE_LUCKY_DRAW_EVENT_UPDATE/cms/event/lucky-draw/:id/editSửa lucky draw
ROUTE_LUCKY_DRAW_EVENT_CUSTOMER_DETAIL/cms/event/lucky-draw/:id/:customerIdChi tiết khách lucky draw
ROUTE_GIFT_EVENT/cms/event/gift-eventOverview gift event
ROUTE_GIFT_EVENT_CREATE/cms/event/gift-event/createTạo gift event
ROUTE_GIFT_EVENT_DETAIL/cms/event/gift-event/:idChi tiết gift event
ROUTE_GIFT_EVENT_UPDATE/cms/event/gift-event/:id/editSửa gift event

Facebook Dataset

RoutePathMục đích
ROUTE_FACEBOOK_DATASET/cms/facebook-datasetWorkspace dataset Facebook
ROUTE_FACEBOOK_DATASET_BOARDCAST_DETAIL/cms/facebook-dataset/:idDetail broadcast dataset
ROUTE_FACEBOOK_DATASET_INFOfacebook-dataset/:idPublic info page với PublicLayout
ItemGiá trị
Module gốcMODULE_CMS = cms
Moderator permissionsITLeader, ITStaff, ContentLeader
Voucher full accessITLeader, ITStaff, BOD
Voucher basic accessthêm Accountant*, CustomerService*, HR*, Telesales*
CMS subdomain module IDsnews, campaign, voucher_management, event_management, fb_dataset
GroupNội dung
MarketingPost, Notification, Campaign, Voucher Management, Facebook Dataset
EventEvent container
Ghi ÂmVoice recording route ngoài domain CMS thuần
Yêu cầuApproval
Chi phíHoàn tiền, chi phí, thanh toán âm
Thiết BịThiết bị, bàn giao, báo hỏng

FE Pages (30+)

NhómPages tiêu biểu
Posts/PagesPosts, PostCreate, PostDetail, Pages, PageCreate, PageDetail, PostCategories, PostCategoryCreate, PostCategoryDetail
CampaignCampaigns, CampaignCreate, CampaignDetail
BannersBanners, BannerCreate, BannerDetail, BannerGroupCreate, BannerGroupDetail
EventsAccumulationEvent*, LuckyDrawEvent*, GiftEvent*
Facebook DatasetFacebookDataset, FacebookDatasetInfo

GraphQL Operations

post.graphql

OperationMục đích
GetPostsPaginationPaging posts
GetPostsLấy posts
GetPostByPkChi tiết post
CreatePostsTạo post
UpdatePosts / UpdatePostByPkSửa post
DeletePostsXóa post
DeletePostCategoryRelationsGỡ quan hệ category-post

post-category.graphql

OperationMục đích
GetPostCategoriesLấy categories
CreatePostCategoriesTạo category
UpdatePostCategoryByPk / UpdatePostCategoriesSửa category
DeletePostCategoriesXóa category

campaign.graphql

OperationMục đích
GetCampaignsPaginationPaging campaign
GetCampaignsLấy campaigns
GetCampaignByPkChi tiết campaign
CreateCampaignsTạo campaign
UpdateCampaigns / UpdateCampaignByPkSửa campaign
UpdateCampaignTimeByPkCập nhật thời gian campaign

voucher.graphql

OperationMục đích
ActivateVoucherKích hoạt voucher
ActivateOfflineVoucherKích hoạt voucher offline
CreateDraftVoucherCampaignTạo draft voucher campaign
ApproveVoucherCampaignDuyệt voucher campaign
ChangeVoucherCampaignStatusĐổi trạng thái campaign
DuplicateCampaignNhân bản campaign
PrintVoucherIn voucher
GetDetailVoucherCampaignChi tiết voucher campaign
SearchVoucherCampaignSummarySummary campaign
GetVoucherAnalyticsSummaryTổng hợp analytics
GetVoucherDistributionByDatePhân phối theo ngày
GetVoucherCampaignHistoryLịch sử campaign
GetVoucherCampaignAnalyticsSummaryAnalytics detail
SearchOfflineVoucherCampaignsTìm campaign offline
GetVoucherBranchStatistics / GetVoucherProductStatistics / GetVoucherProductGroupStatisticsThống kê phân rã

event.graphql

OperationMục đích
GetEvents / GetLuckyDrawEventsDanh sách event
GetEventByPkChi tiết event
GetEventCustomersDanh sách khách trong event
GetRewardClaimsLịch sử claim thưởng
GetEventOrdersĐơn hàng liên quan event
InsertEvent / UpsertEvent / UpdateEventTạo/cập nhật event
RequestOtpRewardClaim / VerifyOtpRewardClaimOTP cho nhận thưởng
GetEventCustomerDetail / GetLuckyEventCustomerDetailDetail khách trong event
GetRewardWheelStatus / GetWheelRewardDetailLucky draw wheel runtime/detail
GetTemplates, GetEventOptionsMaster data cho event

gift-event.graphql

OperationMục đích
GetEventListDanh sách gift events
InsertEventWithDetailsTạo event kèm detail
GetEventDetailsByIdChi tiết gift event
GetGiftEventChartBiểu đồ payout/event
GetCustomerFinancialReport / Aggregate / ItemBáo cáo tài chính khách
GetCustomerVoucherSummaryTổng hợp voucher khách

facebook-dataset.graphql

OperationMục đích
GetFacebookDatasetHistoryListLịch sử đơn hàng liên quan dataset
GetFacebookDatasetDataListDữ liệu dataset
GetFacebookDatasetBroadcastListDanh sách broadcast
GetBroadcastDetailChi tiết broadcast
GetUserReceiveBroadcastDanh sách người nhận
InsertDatasetFBConfig / UpdateDatasetFBConfigCRUD config dataset
SendBroadcastActionGửi broadcast
StopBroadcastDừng broadcast
ConfirmOrderNotification / OrderConfirmLuồng xác nhận đơn
OperationMục đích
GetBannerGroups / GetBannerGroupByPkDanh sách/chi tiết banner group
CreateBannerGroups / UpdateBannerGroups / DeleteBannerGroupsCRUD banner group
GetBanners / GetBannerByPkDanh sách/chi tiết banner
CreateBanners / UpdateBanners / UpdateBannerByPk / DeleteBannersCRUD banner
DeleteBannerGroupItems / CreateBannerGroupItemGắn/gỡ item trong banner group

FE Runtime logic

useCmsStore

StateVai trò
postCategoriesCache category
postsCache posts
bannersCache banners
bannerGroupsCache banner groups
campaignsCache campaigns

usePost.ts

LogicGhi chú
CRUD facadeWrap GraphQL CRUD cho post
Slug lookupgetPostBySlug() query theo contents.slug
Cache-firstƯu tiên Pinia, fallback query network

useBanner.ts

LogicGhi chú
CRUD facadeWrap CRUD cho banner
Query cachingReplace/update cache theo scope query
PK helpersuseGetBannerByPkupdateBannerByPk

useCampaign.ts

LogicGhi chú
Campaign cacheĐồng bộ vào useCmsStore.campaigns
Status filtersSuy luận từ published_at, start_date, end_date
Code lookupHỗ trợ getCampaignByCode() cho campaign còn active

useEvent.tsx

LogicGhi chú
HTML rule generationSinh HTML accumulation/lucky draw/gift event rules
Event-specific templatesMỗi loại event có bộ text/rule riêng

FacebookDataset.tsx / FacebookDatasetTable.tsx

LogicGhi chú
Workspace modeRoute root render FacebookDatasetTable, route detail render RouterView
Tabshistory, data, boardcast
Filter resetĐổi tab sẽ reset filter về init value

AccumulationEventDetail.tsx

LogicGhi chú
Root/detail switchNếu route là detail root thì render AccumulationDetail; nếu route sâu hơn thì render RouterView

Voucher container

LogicGhi chú
Nested tabsVoucher và Voucher Campaign là 2 child trees riêng trong cùng container
LayoutVoucherCampaignLayout.tsx hiện chỉ re-export MainLayout

Backend / data domains

DomainObjects / vai trò
cms databasepost, post_category, banner, banner_group, banner_group_item, banner user view features
ecommerce databasecampaign, voucher_campaigns, event, event_customer, reward_claim, nhiều reporting functions
restful-apiFacebook event notification/webhook-type handlers

Permission model highlights

NhómRoles chính
Moderator/contentITLeader, ITStaff, ContentLeader
Voucher fullITLeader, ITStaff, BOD
Voucher basicVoucher full + Accountant*, CustomerService*, HR*, Telesales*
Voucher reportVoucher full + một phần leadership ở Accounting/CS/HR/Telesales
Event roles constantFPAccumulationRoles, ViewAllAccumulationRoles, SendGiftRoles

Rủi ro / Findings kỹ thuật

#Note
1Banner pages/compositions/GraphQL còn đủ nhưng route tree banner đang bị comment, nên feature có dấu hiệu dormant.
2ROUTE_CAMPAIGN_CREATE bị comment trong route tree dù config vẫn khai báo.
3Nhiều event routes create/detail/update/customer_detail đang để permissions: [], đây là cấu hình cần xem lại.
4banner.graphql được lưu thành banner.graphql.txt, bất thường so với các file GraphQL còn lại.
5FACEBOOK_DATASET_BOARDCAST và route/tab liên quan dùng typo boardcast xuyên suốt codebase.
6ROUTE_FACEBOOK_DATASET_INFO được mount với PublicLayoutmeta.public = isPlatformAdmin(), nghĩa là public-ness không hoàn toàn tĩnh.