feat: 添加 PocketBase 管理端与自定义 hooks 的 API 文档
- 新增 openapi.yaml 文件,定义管理端与自定义 hooks 的接口文档,包括系统、微信认证、平台认证、字典管理、附件管理、文档管理、购物车和订单等接口。 - 新增 order.yaml 文件,定义订单相关的接口,包括查询订单列表、查询订单详情、新增订单记录、修改订单记录和删除订单记录的请求和响应结构。 - 新增 openapi-wx/openapi.yaml 文件,定义 PocketBase 原生 API 文档,包含企业信息、附件信息、产品信息、文档信息、购物车和订单的接口。 - 新增 pocketbase.scheme.js 文件,包含 PocketBase 集合的创建和更新逻辑,定义了多个集合的字段、索引和权限规则。
This commit is contained in:
@@ -24,24 +24,38 @@ if (!AUTH_TOKEN) {
|
||||
|
||||
const pb = new PocketBase(PB_URL);
|
||||
|
||||
const collections = [
|
||||
async function getCollectionIdByName(collectionName) {
|
||||
const list = await pb.collections.getFullList({
|
||||
sort: '-created',
|
||||
});
|
||||
const target = list.find((item) => item.name === collectionName);
|
||||
if (!target) {
|
||||
throw new Error(`未找到集合:${collectionName}`);
|
||||
}
|
||||
return target.id;
|
||||
}
|
||||
|
||||
async function buildCollections() {
|
||||
const productCollectionId = await getCollectionIdByName('tbl_product_list');
|
||||
|
||||
return [
|
||||
{
|
||||
name: 'tbl_cart',
|
||||
type: 'base',
|
||||
listRule: `${OWNER_AUTH_RULE} && ${CART_OWNER_MATCH_RULE} && ${SOFT_DELETE_RULE}`,
|
||||
viewRule: `${OWNER_AUTH_RULE} && ${CART_OWNER_MATCH_RULE} && ${SOFT_DELETE_RULE}`,
|
||||
createRule: `${OWNER_AUTH_RULE} && @request.body.cart_owner = @request.auth.openid`,
|
||||
createRule: '@request.body.cart_owner != ""',
|
||||
updateRule: `${OWNER_AUTH_RULE} && ${CART_OWNER_MATCH_RULE}`,
|
||||
deleteRule: `${OWNER_AUTH_RULE} && ${CART_OWNER_MATCH_RULE}`,
|
||||
fields: [
|
||||
{ name: 'cart_id', type: 'text', required: true, autogeneratePattern: 'CART-[0-9]{13}-[A-Za-z0-9]{6}' },
|
||||
{ name: 'cart_number', type: 'text', required: true },
|
||||
{ name: 'cart_number', type: 'text', required: false },
|
||||
{ name: 'cart_create', type: 'autodate', onCreate: true, onUpdate: false },
|
||||
{ name: 'cart_owner', type: 'text', required: true },
|
||||
{ name: 'cart_product_id', type: 'text', required: true },
|
||||
{ name: 'cart_product_quantity', type: 'number', required: true },
|
||||
{ name: 'cart_status', type: 'text', required: true },
|
||||
{ name: 'cart_at_price', type: 'number', required: true },
|
||||
{ name: 'cart_product_id', type: 'relation', required: true, collectionId: productCollectionId, maxSelect: 1, cascadeDelete: false },
|
||||
{ name: 'cart_product_quantity', type: 'number', required: false },
|
||||
{ name: 'cart_status', type: 'text', required: false },
|
||||
{ name: 'cart_at_price', type: 'number', required: false },
|
||||
{ name: 'cart_remark', type: 'text' },
|
||||
{ name: 'is_delete', type: 'number', default: 0, min: 0, max: 1, onlyInt: true },
|
||||
],
|
||||
@@ -88,7 +102,8 @@ const collections = [
|
||||
'CREATE INDEX idx_tbl_order_owner_status ON tbl_order (order_owner, order_status)',
|
||||
],
|
||||
},
|
||||
];
|
||||
];
|
||||
}
|
||||
|
||||
function normalizeFieldPayload(field, existingField) {
|
||||
const payload = existingField
|
||||
@@ -114,6 +129,12 @@ function normalizeFieldPayload(field, existingField) {
|
||||
payload.onUpdate = typeof field.onUpdate === 'boolean' ? field.onUpdate : false;
|
||||
}
|
||||
|
||||
if (field.type === 'relation') {
|
||||
payload.collectionId = field.collectionId;
|
||||
payload.maxSelect = typeof field.maxSelect === 'number' ? field.maxSelect : 1;
|
||||
payload.cascadeDelete = typeof field.cascadeDelete === 'boolean' ? field.cascadeDelete : false;
|
||||
}
|
||||
|
||||
return payload;
|
||||
}
|
||||
|
||||
@@ -270,6 +291,8 @@ async function init() {
|
||||
pb.authStore.save(AUTH_TOKEN, null);
|
||||
console.log('✅ 已使用 POCKETBASE_AUTH_TOKEN 载入认证状态。');
|
||||
|
||||
const collections = await buildCollections();
|
||||
|
||||
for (const collectionData of collections) {
|
||||
await createOrUpdateCollection(collectionData);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user