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: belongsTo → hasMany)
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.