ChengLei Shao 79f14d9024
chore: main datasource api (#3880)
* chore: main datasource api

* chore: test

* chore: console.log

* chore: middleware order

* chore: test

* chore: middleware order

* chore: test

* chore: middleware options
2024-03-31 16:22:45 +08:00

56 lines
1.3 KiB
TypeScript

import Database from '@nocobase/database';
import { getNameByParams, parseRequest, ResourcerContext, ResourceType } from '@nocobase/resourcer';
export async function db2resource(ctx: ResourcerContext & { db: Database }, next: () => Promise<any>) {
const resourcer = ctx.resourcer;
const database = ctx.db;
const params = parseRequest(
{
path: ctx.request.path,
method: ctx.request.method,
},
{
prefix: resourcer.options.prefix,
accessors: resourcer.options.accessors,
},
);
if (!params) {
return next();
}
const resourceName = getNameByParams(params);
// 如果资源名称未被定义
if (resourcer.isDefined(resourceName)) {
return next();
}
const splitResult = resourceName.split('.');
const collectionName = splitResult[0];
const fieldName = splitResult[1];
// 如果经过加载后是已经定义的表
if (!database.hasCollection(collectionName)) {
return next();
}
const collection = database.getCollection(collectionName);
let resourceType: ResourceType = 'single';
if (fieldName && collection.hasField(fieldName)) {
const field = collection.getField(fieldName);
resourceType = field.type;
}
resourcer.define({
type: resourceType,
name: resourceName,
});
return next();
}
export default db2resource;