import { type AppSchema } from '@fastgpt/global/core/app/type'; import { NodeInputKeyEnum } from '@fastgpt/global/core/workflow/constants'; import { FlowNodeTypeEnum } from '@fastgpt/global/core/workflow/node/constant'; import { MongoApp } from './schema'; import type { StoreNodeItemType } from '@fastgpt/global/core/workflow/type/node'; import { storeSecretValue } from '../../common/secret/utils'; export const beforeUpdateAppFormat = ({ nodes }: { nodes?: StoreNodeItemType[] }) => { if (!nodes) return; nodes.forEach((node) => { // Format header secret node.inputs.forEach((input) => { if (input.key === NodeInputKeyEnum.headerSecret && typeof input.value === 'object') { input.value = storeSecretValue(input.value); } }); // Format dataset search if (node.flowNodeType === FlowNodeTypeEnum.datasetSearchNode) { node.inputs.forEach((input) => { if (input.key === NodeInputKeyEnum.datasetSelectList) { const val = input.value as undefined | { datasetId: string }[] | { datasetId: string }; if (!val) { input.value = []; } else if (Array.isArray(val)) { // Not rewrite reference value if (val.length === 2 && val.every((item) => typeof item === 'string')) { return; } input.value = val .map((dataset: { datasetId: string }) => ({ datasetId: dataset.datasetId })) .filter((item) => !!item.datasetId); } else if (typeof val === 'object' && val !== null) { input.value = [ { datasetId: val.datasetId } ]; } } }); } }); }; /* Get apps */ export async function findAppAndAllChildren({ teamId, appId, fields }: { teamId: string; appId: string; fields?: string; }): Promise { const find = async (id: string) => { const children = await MongoApp.find( { teamId, parentId: id }, fields ).lean(); let apps = children; for (const child of children) { const grandChildrenIds = await find(child._id); apps = apps.concat(grandChildrenIds); } return apps; }; const [app, childDatasets] = await Promise.all([MongoApp.findById(appId, fields), find(appId)]); if (!app) { return Promise.reject('Dataset not found'); } return [app, ...childDatasets]; } export const getAppBasicInfoByIds = async ({ teamId, ids }: { teamId: string; ids: string[] }) => { const apps = await MongoApp.find( { teamId, _id: { $in: ids } }, '_id name avatar' ).lean(); return apps.map((item) => ({ id: item._id, name: item.name, avatar: item.avatar })); };