Skip to content

Mô hình Products ​

Mặt phẳng Products có năm thực thể. Mỗi thực thể là một bảng D1, được đăng ký như một tài nguyên dùng chung của API (xem Endpoints), nên form thêm/sửa, phạm vi, nhật ký và pipeline seed đều dùng lại nguyên vẹn.

Capability ──┐
             │ product_capabilities
Product ─────┘
    ↓ product_id
Application ──── URL (application_urls)
    ↓            └── Release (releases) ── Requirement (release_requirements)
Feature
    ↓
Requirement                              ← mặt phẳng Requirements

Product ​

Bảng products, ID PRO-<slug>, ví dụ PRO-nemo12.

Thuộc tínhGhi chú
codeslug dùng trong URL, UNIQUE
brand_idBrand sở hữu; NULL = sản phẩm của nền tảng Conan1, hiển thị nhãn Nền tảng Conan1
name_en / name_viTên song ngữ
proposition_en / proposition_viMệnh đề giá trị, một câu
domain_en / domain_viMiền kinh doanh: Education / Giáo dục, Platform / Nền tảng. Văn bản tự do, hiện thành huy hiệu mờ trên thẻ sản phẩm
ownerNgười chịu trách nhiệm
kindmarket (bán ra thị trường) · internal (dùng nội bộ)
statusidea · building · live · sunset · retired

Một Brand có nhiều Product; một Product thuộc tối đa một Brand. Sản phẩm đã có yêu cầu thì không bao giờ bị xoá — DELETE chuyển nó sang retired và trả về { "deprecated": true, "reason": "has_requirements" }.

Product Capabilities ​

Bảng nối product_capabilities (product_id, capability_id) — mắt xích đầu tiên của chuỗi truy vết: năng lực doanh nghiệp nào được sản phẩm này hiện thực hoá. Trang sản phẩm hiện các năng lực đó kèm điểm sức khoẻ từ bản đồ năng lực của Brand; trang năng lực trên Compass hiện ngược lại các sản phẩm.

Chỉ architect và executive được thêm/bỏ mắt xích này (qua POST /v1/links/product-capabilities). Rule 11 cảnh báo sản phẩm chưa nối tới năng lực nào.

Application ​

Bảng applications — bảng cũ của Compass, thêm hai cột. ID APP-<slug>.

Thuộc tínhGhi chú
product_idSản phẩm sở hữu ứng dụng; NULL = ứng dụng nền tảng dùng chung chưa gán. ON DELETE SET NULL
repositoryKho mã nguồn, ví dụ https://github.com/dac2205/conan1/tree/main/compass.conan1.com
brand_idVẫn là cột phạm vi như trước — NULL nghĩa là dùng chung; Compass không đổi hành vi
vendor · owner · lifecycleNhư cũ: evaluate → active → sunset → retired

product_id là quyền sở hữu; brand_id là phạm vi hiển thị. Hai cột này cố ý tách nhau: ứng dụng nền tảng (CMS, CRM, Analytics) thuộc sản phẩm PRO-conan1 nhưng brand_id = NULL, nên mọi Brand vẫn nhìn thấy nó.

Quan hệ nhiều–nhiều với năng lực, công nghệ và dữ liệu (capability_applications, application_technologies, application_data) giữ nguyên.

Một bản ghi, hai góc nhìn

Products là nhà của bản ghi ứng dụng. /applications trên Compass là góc nhìn từ phía năng lực của cùng bảng đó — cùng form, cùng cột. Không có hai kho ứng dụng.

URL ​

Bảng application_urls, ID URL-<slug>, ví dụ URL-compass-conan1-com.

Thuộc tínhGhi chú
application_idỨng dụng sở hữu; xoá ứng dụng thì xoá luôn URL (CASCADE)
urlUNIQUE toàn hệ thống — một địa chỉ chỉ thuộc một ứng dụng
kindproduction · staging · preview · api · admin · docs
name_en / name_viNhãn: Public site, Trang công khai

Một ứng dụng có nhiều điểm truy cập: APP-compass có https://compass.conan1.com (production) và https://api.conan1.com (api). URL là sự kiện kiểm kê của một ứng dụng thuộc phạm vi mô hình, nên chỉ architect được sửa.

Sai

Tạo ba ứng dụng nemo12.com, www.nemo12.com, api.nemo12.com.

Đúng

  • Application Nemo12 Website với hai URL production nemo12.com và www.nemo12.com
  • Application Nemo12 API với một URL kind api

Feature ​

Bảng features, ID FEA-<slug>, ví dụ FEA-referral-system.

Thuộc tínhGhi chú
product_idBắt buộc — feature luôn thuộc một sản phẩm
application_idỨng dụng hiện thực hoá; NULL = chưa được xây ở đâu
capability_idNăng lực doanh nghiệp mà feature phục vụ
brand_idPhạm vi, Worker tự điền từ sản phẩm — người dùng không bao giờ gõ
ownerNgười chịu trách nhiệm
statusidea · planned · building · live · retired

Feature là mắt xích giữa Application và Requirement: mỗi yêu cầu thuộc đúng một feature, và feature cho yêu cầu biết ứng dụng lẫn năng lực mặc định của nó (xem quy tắc "cột tường minh thắng").

Release ​

Bảng releases, ID REL-NNNN — số thứ tự toàn hệ thống, không theo Brand.

Thuộc tínhGhi chú
application_idBắt buộc — một bản phát hành thuộc một ứng dụng; xoá ứng dụng thì xoá release
name_en / name_viNhãn, ví dụ v1.4
versionChuỗi phiên bản
released_atNgày phát hành ISO; NULL khi còn planned
statusplanned · released
brand_idPhạm vi, tự điền từ ứng dụng

Bảng nối release_requirements (release_id, requirement_id) ghi yêu cầu nào đã ra trong bản nào. Trang chi tiết ứng dụng có thẻ Releases với ô chọn nhiều yêu cầu của ứng dụng đó; trang chi tiết yêu cầu có dải Releases trả lời câu hỏi "cái này ra khi nào?". Release thuộc mặt phẳng Requirements về mặt quyền: chỉ architect được tạo/sửa.

Release mới ở mức tối thiểu

Chưa có changelog, chưa liên kết với deployment của Cloudflare, chưa có trạng thái rollback. Khi cần, đó là những cột thêm vào releases, không phải bảng mới.

Quyền ghi ​

Tài nguyênAi được ghi
products, featuresarchitect, executive, hoặc brand_owner với bản ghi thuộc Brand của mình (canEditScope)
applications, application-urlsarchitect (canEditModel)
product-capabilitiesarchitect, executive
releases, release-requirementsarchitect

Với features, Worker điền brand_id từ sản phẩm trước khi kiểm tra quyền, nên một brand_owner không thể gắn feature vào sản phẩm của Brand khác — và cũng không cần biết brand_id là gì.

Dữ liệu mẫu ​

Ba sản phẩm được nạp sẵn:

Sản phẩmBrandMiền kinh doanhkind
PRO-conan1 Conan1 PlatformNULL — nền tảngPlatform / Nền tảnginternal
PRO-nemo12 Nemo12BRD-nemo12Education / Giáo dụcmarket
PRO-conan-school Conan SchoolBRD-conan-schoolEducation / Giáo dụcmarket

Ứng dụng và URL được nạp từ kho thật trên Cloudflare — xem Chuyển dữ liệu.