Giao diện
API reference
Collections
collections:list
Danh sách tất cả collection (metadata).
GET /api/collections:list?paginate=falsecollections:listMeta
Danh sách collection đã load kèm field metadata.
GET /api/collections:listMeta?paginate=falseResponse bao gồm fields, category, options cho mỗi collection.
collections:create
Tạo collection mới. Plugin tự động migrate (CREATE TABLE).
POST /api/collections:create
Body: {
"name": "orders",
"title": "Đơn hàng",
"fields": [
{ "name": "title", "type": "string", "interface": "input" },
{ "name": "amount", "type": "float", "interface": "number" },
{ "name": "status", "type": "string", "interface": "select" }
]
}Sau khi tạo:
- INSERT metadata vào
collections+fields. CollectionModel.load()→ tạo Collection instance.CollectionModel.migrate()→ CREATE TABLEt_orders.sendSyncMessage→ đồng bộ sang cluster instances.
collections:update
Cập nhật collection metadata.
PUT /api/collections:update?filterByTk=orders
Body: {
"title": "Đơn hàng (cập nhật)",
"description": "Quản lý đơn hàng"
}collections:destroy
Xóa collection — cascade remove fields, FK constraints, drop table.
DELETE /api/collections:destroy?filterByTk=ordersWARNING
Xóa collection sẽ DROP TABLE vật lý. Dữ liệu trong bảng sẽ mất vĩnh viễn.
collections:setFields
Bulk replace toàn bộ fields cho collection (transactional).
POST /api/collections:setFields?filterByTk=orders
Body: {
"fields": [
{ "name": "title", "type": "string" },
{ "name": "amount", "type": "float" },
{ "name": "newField", "type": "text" }
]
}Fields không có trong danh sách mới sẽ bị xóa (cascade drop column).
Fields
fields:list
Danh sách fields của collection.
GET /api/collections/orders/fields:listfields:create
Thêm field mới.
POST /api/collections/orders/fields:create
Body: {
"name": "customerName",
"type": "string",
"interface": "input",
"description": "Tên khách hàng"
}Sau khi tạo: ALTER TABLE t_orders ADD COLUMN customer_name VARCHAR(255).
fields:update
Cập nhật field metadata (title, interface, description...).
PUT /api/collections/orders/fields:update?filterByTk=customerName
Body: {
"description": "Tên khách hàng (bắt buộc)"
}fields:destroy
Xóa field — cascade drop column, remove FK nếu có.
DELETE /api/collections/orders/fields:destroy?filterByTk=customerNameComposite Constraints
collections:createCompositeConstraint
Tạo unique constraint trên nhiều field.
POST /api/collections/orders/compositeConstraints:create
Body: {
"fields": ["customerId", "orderDate"],
"type": "unique"
}collections:updateCompositeConstraint
Cập nhật constraint.
PUT /api/collections/orders/compositeConstraints:update?filterByTk=<constraintId>
Body: { "fields": ["customerId", "orderDate", "type"] }collections:deleteCompositeConstraint
Xóa constraint.
DELETE /api/collections/orders/compositeConstraints:destroy?filterByTk=<constraintId>Database Views
dbViews:list
Danh sách DB view chưa kết nối collection.
GET /api/dbViews:listdbViews:get
Infer fields từ view — trả về danh sách field tự động nhận diện.
GET /api/dbViews:get?filterByTk=v_order_summarydbViews:query
Query trực tiếp từ view (có phân trang).
GET /api/dbViews:query?filterByTk=v_order_summary&page=1&pageSize=20Main Data Source
mainDataSource:refresh
Reload tất cả collection từ metadata. Dùng khi metadata bị sửa trực tiếp hoặc sau migrate.
POST /api/mainDataSource:refreshmainDataSource:syncFields
Đồng bộ fields từ database vật lý vào metadata (reverse engineering). Phát hiện column mới, column đã xóa.
POST /api/mainDataSource:syncFields?filterByTk=ordersVí dụ sử dụng
Tạo collection với relation
typescript
await agent.resource('collections').create({
values: {
name: 'orders',
title: 'Đơn hàng',
fields: [
{ name: 'title', type: 'string', interface: 'input' },
{ name: 'amount', type: 'float', interface: 'number' },
{
name: 'customer',
type: 'belongsTo',
interface: 'obo',
target: 'users',
foreignKey: 'customerId',
},
],
},
});Sync fields từ database
typescript
await agent.resource('mainDataSource').syncFields({
filterByTk: 'orders',
});
const fields = await agent.resource('collections.fields', 'orders').list();