Giao diện
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 RequirementsProduct
Bảng products, ID PRO-<slug>, ví dụ PRO-nemo12.
| Thuộc tính | Ghi chú |
|---|---|
code | slug dùng trong URL, UNIQUE |
brand_id | Brand 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_vi | Tên song ngữ |
proposition_en / proposition_vi | Mệnh đề giá trị, một câu |
domain_en / domain_vi | Miề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 |
owner | Người chịu trách nhiệm |
kind | market (bán ra thị trường) · internal (dùng nội bộ) |
status | idea · 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ính | Ghi chú |
|---|---|
product_id | Sả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 |
repository | Kho mã nguồn, ví dụ https://github.com/dac2205/conan1/tree/main/compass.conan1.com |
brand_id | Vẫ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 · lifecycle | Như 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ính | Ghi chú |
|---|---|
application_id | Ứng dụng sở hữu; xoá ứng dụng thì xoá luôn URL (CASCADE) |
url | UNIQUE toàn hệ thống — một địa chỉ chỉ thuộc một ứng dụng |
kind | production · staging · preview · api · admin · docs |
name_en / name_vi | Nhã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.comvà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ính | Ghi chú |
|---|---|
product_id | Bắ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_id | Năng lực doanh nghiệp mà feature phục vụ |
brand_id | Phạm vi, Worker tự điền từ sản phẩm — người dùng không bao giờ gõ |
owner | Người chịu trách nhiệm |
status | idea · 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ính | Ghi chú |
|---|---|
application_id | Bắ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_vi | Nhãn, ví dụ v1.4 |
version | Chuỗi phiên bản |
released_at | Ngày phát hành ISO; NULL khi còn planned |
status | planned · released |
brand_id | Phạ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ên | Ai được ghi |
|---|---|
products, features | architect, executive, hoặc brand_owner với bản ghi thuộc Brand của mình (canEditScope) |
applications, application-urls | architect (canEditModel) |
product-capabilities | architect, executive |
releases, release-requirements | architect |
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ẩm | Brand | Miền kinh doanh | kind |
|---|---|---|---|
PRO-conan1 Conan1 Platform | NULL — nền tảng | Platform / Nền tảng | internal |
PRO-nemo12 Nemo12 | BRD-nemo12 | Education / Giáo dục | market |
PRO-conan-school Conan School | BRD-conan-school | Education / Giáo dục | market |
Ứng dụng và URL được nạp từ kho thật trên Cloudflare — xem Chuyển dữ liệu.