Bỏ qua, đến nội dung

Kiến trúc

Tổng quan

plugin-data-source-main là cầu nối giữa metadata (định nghĩa collection/field lưu trong DB) và runtime ORM (Collection instances chạy trong bộ nhớ). Plugin quản lý toàn bộ lifecycle: lưu metadata → load vào runtime → sync bảng vật lý.

Meta-driven DDL

Plugin tuân theo mô hình meta-driven: admin định nghĩa collection/field qua UI → plugin tự động tạo/thay đổi bảng vật lý tương ứng.

Luồng tạo collection mới

Naming convention

Collection name được prefix t_ khi tạo bảng vật lý:

Metadata nameBảng vật lý
orderst_orders
orderItemst_order_items

Collection/Field lifecycle

CollectionRepository

Repository load tất cả collection từ DB theo topological sort — đảm bảo collection không phụ thuộc được load trước, collection có FK/inherit được load sau.

users (không phụ thuộc) → orders (FK → users) → orderItems (FK → orders)

CollectionModel

MethodMô tả
load()Đọc metadata → tạo Collection instance trong Database ORM
migrate()Tạo/alter bảng vật lý (CREATE TABLE, ADD COLUMN, ALTER TYPE...)
remove()Xóa Collection instance khỏi ORM + DROP TABLE (nếu configured)

FieldModel

MethodMô tả
load()Đọc field metadata → thêm field vào Collection instance
SyncĐồng bộ unique index, default value, sort, FK constraint

Field types

Plugin hỗ trợ nhiều field type, mỗi type mapping sang SQL column type:

Field typeSQL type (PostgreSQL)Ví dụ
stringVARCHAR(255)Tên, email
textTEXTMô tả dài
integerINTEGERSố lượng
bigIntBIGINTID snowflake
float / doubleFLOAT / DOUBLE PRECISIONGiá
booleanBOOLEANTrạng thái
dateDATENgày sinh
json / jsonbJSON / JSONBOptions
belongsToFK columnuser_id → users
hasMany(không tạo column)Liên kết ngược
belongsToManyJunction tableM2M qua bảng trung gian

Hooks

Plugin đăng ký nhiều DB hooks xử lý các trường hợp đặc biệt:

HookThời điểmHành vi
View collectionsafterSaveTạo collection từ DB view, infer field types
Reverse fieldsafterCreate (field)Tự động tạo reverse field cho relation (VD: belongsTohasMany)
FK constraintsafterSave (field)Tạo/sửa foreign key trên database
MySQL checksbeforeSaveValidate đặc thù MySQL (VARCHAR length, index prefix)
ValidatebeforeSaveKiểm tra name unique, reserved words, circular FK
Inherited collectionsafterSaveXử lý collection kế thừa (inherits) — PostgreSQL table inheritance

Sync — Multi-instance

sendSyncMessage

Khi chạy cluster (nhiều instance), thay đổi collection/field trên instance A cần đồng bộ sang instance B. Plugin dùng sendSyncMessage qua message bus:

mainDataSource resource

ActionMô tả
refreshReload tất cả collection từ metadata (clear + load lại)
syncFieldsĐồng bộ field từ database vật lý vào metadata (reverse engineering)

Database views

Admin có thể tạo collection từ DB view có sẵn. Plugin infer field types từ view schema:

db2cm — Database to Collection Manager

Khi collection được tạo bằng code (không qua UI), db2cm tự động import metadata vào bảng collections/fields để hiển thị trên Collection Manager UI.