Skip to content

Public Schema

Schema public chứa 30 model bao gồm miền kinh doanh chính. Các model được định nghĩa sử dụng pgTable() từ Drizzle ORM và sử dụng generateCommonColumnDefs() chung cho các cột id, createdAt, modifiedAt, deletedAt, và metadata.

Nguồn: packages/core/src/models/schemas/public/

Quản lý Người dùng

Sơ đồ quan hệ thực thể sau đây thể hiện các liên kết giữa các model liên quan đến người dùng và phân quyền:

User

Thực thể người dùng chính đại diện cho tất cả người dùng hệ thống.

CộtKiểuRàng buộcMô tả
idtextPKSnowflake ID
realmtextDEFAULT ''Realm/tenant người dùng
statustextNOT NULLTrạng thái người dùng (từ CommonStatuses)
typetextNOT NULLLoại người dùng (SYSTEM, LINKED)
activated_attimestamptzThời gian kích hoạt tài khoản
last_login_attimestamptzThời gian đăng nhập lần cuối
parent_idtextTham chiếu người dùng cha
+ các cột chungcreatedAt, modifiedAt, deletedAt, metadata

Sử dụng extraUserColumns({ idType: 'string' }) từ IGNIS.

UserProfile

Thông tin người dùng mở rộng (quan hệ một-một với User).

CộtKiểuRàng buộcMô tả
emailstext[]DEFAULT '{}'Mảng địa chỉ email
phonestext[]DEFAULT '{}'Mảng số điện thoại
first_nametextTên
last_nametextHọ
birthdayisoTimestampNgày sinh (chuỗi ISO 8601)
localetextDEFAULT 'en-US'Tùy chọn ngôn ngữ
user_idtextNOT NULLFK đến User
+ các cột chung

UserIdentifier

Nhiều phương thức định danh cho người dùng.

CộtKiểuRàng buộcMô tả
schemetextNOT NULLLoại định danh (USERNAME, EMAIL, PHONE_NUMBER, USER_NUMBER, NX_AUTH)
identifiertextNOT NULLGiá trị định danh
verifiedbooleanNOT NULL, DEFAULT falseTrạng thái xác minh
user_idtextNOT NULLFK đến User
+ các cột chung

Ràng buộc duy nhất: (scheme, identifier)

UserCredential

Thông tin xác thực (mật khẩu, token OAuth).

CộtKiểuRàng buộcMô tả
schemetextNOT NULLLoại thông tin xác thực (BASIC, TWO_FA, OAUTH, OAUTH2)
credentialtextNOT NULLGiá trị thông tin xác thực đã băm
user_idtextNOT NULLFK đến User
+ các cột chung

UserConfiguration

Cài đặt cấu hình theo từng người dùng sử dụng mẫu cột kiểu dữ liệu.

CộtKiểuRàng buộcMô tả
nametextTên cấu hình
codetextNOT NULLMã cấu hình (ví dụ: PREFERENCES)
descriptiontextMô tả
grouptextNOT NULLNhóm cấu hình
user_idtextNOT NULLFK đến User
+ các cột kiểu dữ liệudataType, tValue, nValue, boValue, bValue, jValue
+ các cột chung

UserMapping

Ánh xạ người dùng đến tổ chức và merchant sử dụng tham chiếu đa hình.

CộtKiểuRàng buộcMô tả
principal_idtextID đích đa hình (ví dụ: ID tổ chức hoặc merchant)
principal_typetextLoại đích đa hình (ví dụ: Organizer, Merchant)
user_idtextNOT NULLFK đến User
+ các cột chung

UserRole

Liên kết người dùng với vai trò sử dụng phạm vi đa hình.

CộtKiểuRàng buộcMô tả
principal_idtextID phạm vi (ví dụ: ID tổ chức cho vai trò có phạm vi)
principal_typetextLoại phạm vi
user_idtextNOT NULLFK đến User
+ các cột chung

Phân quyền

Role

Định nghĩa vai trò cho RBAC với hỗ trợ đa ngôn ngữ.

CộtKiểuRàng buộcMô tả
identifiertextNOT NULL, UNIQUEMã vai trò (ví dụ: 999-super-admin)
priorityintegerNOT NULLMức độ ưu tiên (cao hơn = đặc quyền hơn)
statustextNOT NULLTrạng thái vai trò
namejsonb (i18n)NOT NULLTên đa ngôn ngữ
descriptionjsonb (i18n)Mô tả đa ngôn ngữ
+ các cột chung

Sử dụng extraRoleColumns() từ IGNIS. Các vai trò được định nghĩa sẵn:

Vai tròĐịnh danhƯu tiên
Super Admin999-super-admin999
Admin998-admin998
Operator997-operator997
Organizer Owner899-organizer-owner899
Employee898-employee898

Permission

Định nghĩa quyền cho kiểm soát truy cập.

CộtKiểuRàng buộcMô tả
codetextNOT NULL, UNIQUEMã quyền
nametextNOT NULLTên quyền
subjecttextNOT NULLChủ thể tài nguyên
p_typetextNOT NULLLoại quyền
actiontextNOT NULLHành động được phép
scopetextNOT NULLPhạm vi quyền
parent_idtextFK quyền cha
+ các cột chung

Sử dụng extraPermissionColumns({ idType: 'string' }) từ IGNIS.

PermissionMapping

Ánh xạ quyền đến vai trò (bảng nối nhiều-nhiều).

CộtKiểuRàng buộcMô tả
+ các cột ánh xạ quyềnTừ extraPermissionMappingColumns({ idType: 'string' })
+ các cột chung

Tổ chức

Sơ đồ quan hệ thực thể sau đây thể hiện các liên kết giữa các model tổ chức và sản phẩm:

Organizer

Thực thể tổ chức kinh doanh cấp cao nhất với thông tin pháp lý, liên hệ, và vị trí.

CộtKiểuRàng buộcMô tả
slugtextNOT NULL, UNIQUEĐịnh danh thân thiện URL
statustextNOT NULL, DEFAULT ACTIVATEDTrạng thái tổ chức
identifiertextNOT NULL, UNIQUETự động tạo (ví dụ: O_20260216_...)
namejsonb (i18n)NOT NULLTên đa ngôn ngữ
descriptionjsonb (i18n)Mô tả đa ngôn ngữ
tax_numbertextMã số thuế
registration_numbertextSố đăng ký kinh doanh
registration_typetextLoại đăng ký (VN_HOUSEHOLD_BUSINESS, VN_PRIVATE_ENTERPRISE, v.v.)
registration_dateisoTimestampNgày đăng ký
license_numbertextSố giấy phép kinh doanh
vat_numbertextSố VAT
contact_nametextTên liên hệ chính
contact_phonetextĐiện thoại liên hệ
contact_emailtextEmail liên hệ
websitetextURL trang web
locationjsonb (ILocation)Địa chỉ vật lý và tọa độ
socialjsonb (ISocial)Liên kết mạng xã hội
parent_idtextFK tổ chức cha
created_bytextID người dùng tạo
modified_bytextID người dùng sửa đổi cuối
+ các cột chung

Merchant

Thực thể cửa hàng/chi nhánh thuộc một tổ chức.

CộtKiểuRàng buộcMô tả
slugtextNOT NULLĐịnh danh thân thiện URL (duy nhất theo tổ chức)
statustextNOT NULL, DEFAULT ACTIVATEDTrạng thái merchant
identifiertextNOT NULL, UNIQUETự động tạo (ví dụ: M_20260216_...)
namejsonb (i18n)NOT NULLTên đa ngôn ngữ
descriptionjsonb (i18n)Mô tả đa ngôn ngữ
currencytextNOT NULLMã tiền tệ (ví dụ: VND)
typetextNOT NULLLoại merchant (DEFAULT, TICKET, FNB, THEATER)
date_fromisoTimestampNgày bắt đầu hoạt động
date_toisoTimestampNgày kết thúc hoạt động
locationjsonb (ILocation)Địa chỉ vật lý và tọa độ
parent_idtextFK merchant cha
organizer_idtextNOT NULLFK đến Organizer
+ các cột chung

Ràng buộc duy nhất: (slug, organizer_id)

MerchantIdentifier

Định danh bên ngoài cho merchant (ví dụ: ID merchant của nhà cung cấp thanh toán).

CộtKiểuRàng buộcMô tả
schemetextNOT NULLLược đồ định danh (SYSTEM, SLUG, VNPAY_QR_MMS, VNPAY_PHONE_POS, VNPAY_SMART_POS)
identifiertextNOT NULLGiá trị định danh
merchant_idtextNOT NULLFK đến Merchant
+ các cột chung

Ràng buộc duy nhất: (scheme, identifier)

Sản phẩm

Product

Thực thể sản phẩm chính.

CộtKiểuRàng buộcMô tả
slugtextNOT NULLĐịnh danh thân thiện URL (duy nhất theo merchant)
identifiertextNOT NULL, UNIQUETự động tạo (ví dụ: P_20260216_...)
statustextNOT NULL, DEFAULT ACTIVATEDTrạng thái sản phẩm
merchant_idtextNOT NULLFK đến Merchant
category_idtextFK đến Category
parent_idtextFK sản phẩm cha
+ các cột chung

Ràng buộc duy nhất: (slug, merchant_id)

ProductInfo

Chi tiết sản phẩm mở rộng sử dụng mẫu tham chiếu đa hình.

CộtKiểuRàng buộcMô tả
principal_idtextID chủ sở hữu đa hình (Product hoặc ProductVariant ID)
principal_typetextLoại chủ sở hữu đa hình
namejsonb (i18n)NOT NULLTên đa ngôn ngữ
descriptionjsonb (i18n)Mô tả đa ngôn ngữ
+ các cột chung

ProductIdentifier

Nhiều lược đồ định danh cho sản phẩm (SKU, mã vạch, mã QR).

CộtKiểuRàng buộcMô tả
principal_idtextID chủ sở hữu đa hình
principal_typetextLoại chủ sở hữu đa hình
schemetextNOT NULLLược đồ (SYSTEM, SLUG, SKU, BARCODE, QRCODE)
identifiertextNOT NULLGiá trị định danh
+ các cột chung

Ràng buộc duy nhất: (scheme, identifier)

ProductVariant

Các biến thể sản phẩm với hỗ trợ tính giá vốn và phân bổ.

CộtKiểuRàng buộcMô tả
slugtextNOT NULLĐịnh danh thân thiện URL
identifiertextNOT NULL, UNIQUETự động tạo (ví dụ: PV_20260216_...)
statustextNOT NULL, DEFAULT NEWTrạng thái biến thể (NEW, ACTIVATED, DEACTIVATED, ARCHIVED)
date_fromisoTimestampNgày bắt đầu khả dụng
date_toisoTimestampNgày kết thúc khả dụng
costdecimal(15,4)Giá vốn đơn vị
costing_methodstextDEFAULT TIME_BASEDPhương pháp tính giá vốn (TIME_BASED, FIFO, LIFO, AVERAGE)
product_idtextNOT NULLFK đến Product
allocation_plan_idtextFK đến AllocationPlan
allocation_layout_idtextFK đến AllocationLayout
allocation_zone_idtextFK đến AllocationZone
allocation_unit_idtextFK đến AllocationUnit
+ các cột chung

ProductVariantMapping

Ánh xạ biến thể sản phẩm đến các thuộc tính biến thể sử dụng tham chiếu đa hình.

CộtKiểuRàng buộcMô tả
principal_idtextID đa hình
principal_typetextLoại đa hình
product_variant_idtextNOT NULLFK đến ProductVariant
+ các cột chung

Variant

Định nghĩa thuộc tính biến thể (ví dụ: Kích thước, Màu sắc).

CộtKiểuRàng buộcMô tả
principal_typetextLoại chủ sở hữu
principal_idtextID chủ sở hữu
codetextNOT NULLMã biến thể
+ các cột kiểu dữ liệudataType, tValue, nValue, boValue, bValue, jValue
+ các cột chung

Category

Phân loại sản phẩm với hỗ trợ đa ngôn ngữ.

CộtKiểuRàng buộcMô tả
statustextNOT NULL, DEFAULT UNKNOWNTrạng thái danh mục
namejsonb (i18n)NOT NULLTên đa ngôn ngữ
descriptionjsonb (i18n)Mô tả đa ngôn ngữ
is_addonbooleanNOT NULL, DEFAULT falseCó phải danh mục addon hay không
merchant_idtextNOT NULLFK đến Merchant
+ các cột chung

Thương mại

Sơ đồ quan hệ thực thể sau đây thể hiện các liên kết giữa các model thương mại và hệ thống:

SaleChannel

Kênh bán hàng để phân phối sản phẩm.

CộtKiểuRàng buộcMô tả
slugtextNOT NULLĐịnh danh thân thiện URL (duy nhất theo merchant)
statustextNOT NULL, DEFAULT ACTIVATEDTrạng thái kênh
identifiertextNOT NULL, UNIQUETự động tạo (ví dụ: S_20260216_...)
namejsonb (i18n)NOT NULLTên đa ngôn ngữ
descriptionjsonb (i18n)Mô tả đa ngôn ngữ
merchant_idtextNOT NULLFK đến Merchant
parent_idtextFK kênh cha
+ các cột chung

Ràng buộc duy nhất: (slug, merchant_id)

SaleChannelProduct

Bảng nối liên kết sản phẩm với kênh bán hàng.

CộtKiểuRàng buộcMô tả
product_idtextNOT NULLFK đến Product
sale_channel_idtextNOT NULLFK đến SaleChannel
+ các cột chung

Quota

Giới hạn số lượng cho chiến dịch.

CộtKiểuRàng buộcMô tả
quantityintegerNOT NULLSố lượng có sẵn
statustextNOT NULL, DEFAULT UNKNOWNTrạng thái quota
namejsonb (i18n)NOT NULLTên đa ngôn ngữ
descriptionjsonb (i18n)Mô tả đa ngôn ngữ
campaign_idtextNOT NULLFK đến Campaign
+ các cột chung

Campaign

Các chiến dịch khuyến mãi.

CộtKiểuRàng buộcMô tả
statustextNOT NULL, DEFAULT UNKNOWNTrạng thái chiến dịch
namejsonb (i18n)NOT NULLTên đa ngôn ngữ
descriptionjsonb (i18n)Mô tả đa ngôn ngữ
date_fromtimestamptzNgày bắt đầu chiến dịch
date_totimestamptzNgày kết thúc chiến dịch
merchant_idtextNOT NULLFK đến Merchant
+ các cột chung

Hệ thống

Configuration

Cấu hình hệ thống và tích hợp với hỗ trợ thông tin xác thực mã hóa.

CộtKiểuRàng buộcMô tả
codetextNOT NULLMã cấu hình
nametextTên cấu hình
descriptiontextMô tả
grouptextNOT NULLNhóm (SYSTEM, TABLE, INTEGRATION)
statustextDEFAULT ACTIVATEDTrạng thái cấu hình
environmenttextNgữ cảnh môi trường
credentialtextThông tin xác thực mã hóa (ẩn, không bao giờ trả về)
principalIdtextID thực thể chủ sở hữu
principalTypetextLoại thực thể chủ sở hữu
created_bytextID người dùng tạo
modified_bytextID người dùng sửa đổi cuối
+ các cột kiểu dữ liệudataType, tValue, nValue, boValue, bValue, jValue
+ các cột chung

Ràng buộc duy nhất: (group, code, principalId, principalType, environment, deletedAt)

Chỉ mục: (group, code, environment), (group, principalType), GIN trên metadata

Settings

Cài đặt khóa-giá trị sử dụng quyền sở hữu đa hình và lưu trữ kiểu dữ liệu.

CộtKiểuRàng buộcMô tả
principal_idtextID thực thể chủ sở hữu
principal_typetextLoại thực thể chủ sở hữu
created_bytextNgười tạo
modified_bytextNgười sửa đổi cuối
+ các cột kiểu dữ liệudataType, tValue, nValue, boValue, bValue, jValue
+ các cột chung

Ràng buộc duy nhất: (principalId, principalType, deletedAt)

Device

Thiết bị POS và đầu cuối với thông tin phần cứng/phần mềm.

CộtKiểuRàng buộcMô tả
statustextNOT NULL, DEFAULT NEWTrạng thái thiết bị (NEW, ACTIVATED, DEACTIVATED, SUSPENDED, ARCHIVED)
namejsonb (i18n)NOT NULLTên đa ngôn ngữ
descriptionjsonb (i18n)Mô tả đa ngôn ngữ
identifiertextNOT NULL, UNIQUETự động tạo (ví dụ: D_20260216_...)
codetextUNIQUEMã ngắn
typetextNOT NULLLoại thiết bị (POS_TERMINAL, MOBILE_POS, TABLET, BARCODE_SCANNER, v.v.)
locationjsonb (ILocation)Vị trí vật lý
organizer_idtextNOT NULLFK đến Organizer
merchant_idtextFK đến Merchant
hardware_infojsonbIDeviceHardwareInfo (nhà sản xuất, model, serialNumber, v.v.)
software_infojsonbIDeviceSoftwareInfo (os, osVersion, appVersion, v.v.)
last_activity_atisoTimestampThời gian hoạt động cuối
activated_atisoTimestampThời gian kích hoạt
deactivated_atisoTimestampThời gian vô hiệu hóa
pintextMã PIN thiết bị
purchase_dateisoTimestampNgày mua
warranty_expires_atisoTimestampNgày hết bảo hành
last_maintenance_atisoTimestampBảo trì lần cuối
next_maintenance_atisoTimestampBảo trì dự kiến tiếp theo
maintenance_notestextGhi chú bảo trì
vendortextNhà cung cấp thiết bị
+ các cột chung

Metadata tệp/phương tiện cho tài sản lưu trữ trong Minio hoặc đĩa cục bộ.

CộtKiểuRàng buộcMô tả
idtextPKSnowflake ID
bucket_nametextNOT NULL, indexedBucket lưu trữ
object_nametextNOT NULL, indexedTên đối tượng trong lưu trữ
linktextNOT NULLURL truy cập (presigned)
mimetypetextNOT NULLLoại MIME
sizeintegerNOT NULLKích thước tệp tính bằng byte
etagtextThẻ thực thể
metadatajsonbMetadata bổ sung
storage_typetextNOT NULL, indexedLoại lưu trữ (minio, disk)
is_syncedbooleanNOT NULL, DEFAULT false, indexedTrạng thái đồng bộ
principal_typetextLoại thực thể chủ sở hữu
principal_idtextID thực thể chủ sở hữu
created_attimestamptzThời gian tạo
modified_attimestamptzThời gian sửa đổi cuối

Lưu ý: MetaLink sử dụng generateIdColumnDefs + generateTzColumnDefs trực tiếp (không có deletedAt).

Migration

Theo dõi việc thực thi migration dữ liệu mẫu.

CộtKiểuRàng buộcMô tả
idtext/serialPKTự động tăng hoặc ID được tạo
nametextNOT NULLTên migration
statustextNOT NULLTrạng thái migration (từ MigrationStatuses)
created_attimestamptzThời gian thực thi
modified_attimestamptzCập nhật lần cuối

Lưu ý: Sử dụng generateIdColumnDefs() (không có tùy chọn string) và generateTzColumnDefs().

EmailVerification

Mã và token xác minh email với giới hạn tần suất.

CộtKiểuRàng buộcMô tả
verification_codevarcharNOT NULL, indexedMã xác minh 6 chữ số
code_generated_attimestamptzNOT NULLThời gian tạo mã
code_expires_attimestamptzNOT NULL, indexedHết hạn mã (10 phút)
code_attemptsintegerNOT NULL, DEFAULT 0Số lần thử thất bại (tối đa 3)
verification_tokenvarcharNOT NULL, indexedToken xác minh 32 byte
token_generated_attimestamptzNOT NULLThời gian tạo token
token_expires_attimestamptzNOT NULL, indexedHết hạn token (24 giờ)
last_code_sent_attimestamptzNOT NULLThời gian gửi mã lần cuối
resend_countintegerNOT NULL, DEFAULT 0Số lần gửi lại (tối đa 5/ngày)
daily_resend_reset_attimestamptzNOT NULLThời gian đặt lại hàng ngày
locked_untiltimestamptzHết hạn khóa tài khoản (15 phút)
is_verifiedbooleanNOT NULL, DEFAULT falseTrạng thái xác minh
verified_attimestamptzThời gian xác minh
verification_methodvarcharPhương thức sử dụng (code hoặc token)
verification_ipvarcharĐịa chỉ IP sử dụng
user_identifier_idtextNOT NULL, indexedFK đến UserIdentifier
+ các cột chung

Định danh Tự động Tạo

Hầu hết các thực thể sử dụng định danh tự động tạo với định dạng {PREFIX}_{YYYYMMDD}_{SNOWFLAKE_ID}:

Thực thểTiền tốVí dụ
OrganizerO_O_20260216_1234567890
MerchantM_M_20260216_1234567890
ProductP_P_20260216_1234567890
ProductVariantPV_PV_20260216_1234567890
SaleChannelS_S_20260216_1234567890
DeviceD_D_20260216_1234567890

Tài liệu Liên quan

Proprietary and Confidential. Unauthorized copying, distribution, or use of this software is strictly prohibited.