@yongdall/api 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/routers.yongdall.mjs +17 -1
- package/routers.yongdall.mjs.map +1 -1
package/package.json
CHANGED
package/routers.yongdall.mjs
CHANGED
|
@@ -7,6 +7,7 @@ import { useDatabase } from "@yongdall/connection";
|
|
|
7
7
|
const router$5 = new ApiRouter();
|
|
8
8
|
router$5.get(async (ctx) => {
|
|
9
9
|
const searchParams = ctx.url.searchParams;
|
|
10
|
+
const applicationId = searchParams.get("application") || searchParams.get("applicationId") || "";
|
|
10
11
|
const model = searchParams.get("model") || "";
|
|
11
12
|
const organization = searchParams.get("organization") || "";
|
|
12
13
|
const user = searchParams.get("user") || "";
|
|
@@ -19,8 +20,23 @@ router$5.get(async (ctx) => {
|
|
|
19
20
|
ctx.status = 404;
|
|
20
21
|
return;
|
|
21
22
|
}
|
|
23
|
+
const applicationKey = ["applicationId", "application"].find((field) => {
|
|
24
|
+
const type = pageModel.fields[field]?.type;
|
|
25
|
+
return type && typeof type === "string";
|
|
26
|
+
});
|
|
22
27
|
let sql = new Query(pageModel, true).where("model", model).where("organization", organization).where("user", user).where("workspace", workspace).where("page", page).where("current", true);
|
|
23
|
-
|
|
28
|
+
if (applicationKey) {
|
|
29
|
+
let where = Where.and(applicationKey, null);
|
|
30
|
+
sql = sql.where(applicationId ? where.or(applicationKey, applicationId) : where);
|
|
31
|
+
}
|
|
32
|
+
const database = useDatabase(pageModel.databaseId);
|
|
33
|
+
if (applicationKey && applicationId) {
|
|
34
|
+
const list = await database.find(sql);
|
|
35
|
+
const define = list.find((v) => v[applicationKey]) || list[0];
|
|
36
|
+
if (!define) ctx.status = 404;
|
|
37
|
+
return define;
|
|
38
|
+
}
|
|
39
|
+
let define = await database.first(sql);
|
|
24
40
|
if (!define) ctx.status = 404;
|
|
25
41
|
return define;
|
|
26
42
|
});
|
package/routers.yongdall.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routers.yongdall.mjs","names":["router","router","router","name","router","router","pageRouter","userRouter","menusRouter","applicationRouter","enumerationsRouter","formLayoutsRouter","permissionsRouter"],"sources":["../../api/api/routers/page.mjs","../../api/api/routers/application.mjs","../../api/api/routers/menus.mjs","../../api/api/routers/user.mjs","../../api/api/routers/enumerations.mjs","../../api/api/routers/formLayouts.mjs","../../api/api/routers/permissions.mjs","../../api/api/routers/index.mjs"],"sourcesContent":["import { ApiRouter } from '@yongdall/http';\nimport { Query } from '@yongdall/model';\nimport { getModel } from '@yongdall/core';\nimport { useDatabase } from '@yongdall/connection';\nimport { e404 } from '@yongdall/http';\n\n\n\nconst router = new ApiRouter();\nrouter.get(async ctx => {\n\tconst searchParams = ctx.url.searchParams;\n\tconst model = searchParams.get('model') || '';\n\tconst organization = searchParams.get('organization') || '';\n\tconst user = searchParams.get('user') || '';\n\tconst workspace = searchParams.get('workspace') || '';\n\tconst page = searchParams.get('page') || '';\n\tif (!page) { return e404(ctx); }\n\tif (!model && !organization && !user && !workspace) { return e404(ctx); }\n\t\n\n\tconst pageModel = await getModel('page');\n\tif (!pageModel) {\n\t\tctx.status = 404;\n\t\treturn\n\t}\n\n\tlet sql = new Query(pageModel, true)\n\t\t.where('model', model)\n\t\t.where('organization', organization)\n\t\t.where('user', user)\n\t\t.where('workspace', workspace)\n\t\t.where('page', page)\n\t\t.where('current', true)\n\tconst database = useDatabase(pageModel.databaseId);\n\tlet define = await database.first(sql);\n\tif (!define) { ctx.status = 404; }\n\treturn define;\n});\nexport default router;\n","import { ApiRouter } from '@yongdall/http';\nimport { Query, Where } from '@yongdall/model';\nimport { bootConfiguration, getModel, isSingleUser, useTenant } from '@yongdall/core';\nimport { useDatabase } from '@yongdall/connection';\n/** @import { BootConfiguration } from '@yongdall/common' */\n\n/**\n * \n * @param {string} domain \n * @param {string | number} port \n * @returns {Promise<BootConfiguration>}\n */\nasync function defaultConfiguration(domain, port) {\n\treturn createConfiguration({\n\t\tdomain, port, path: bootConfiguration.path,\n\t\tauthRequired: bootConfiguration.authRequired,\n\t})\n\n}\n/**\n * \n * @param {Record<string, any>} app \n * @returns {Promise<BootConfiguration>}\n */\nasync function createConfiguration(app) {\n\treturn {\n\t\tsingle: await useTenant().then(v => Boolean(v.single)),\n\t\tpages: bootConfiguration.pages,\n\t\tconfigurationPages: bootConfiguration.configurationPages,\n\t\tdomain: app.domain, port: app.port, path: app.path,\n\t\troute: app.route || bootConfiguration.route,\n\t\ttheme: app.theme || bootConfiguration.theme,\n\t\tskin: app.skin || bootConfiguration.skin,\n\t\tauthenticator: app.authenticator || bootConfiguration.authenticator,\n\t\tauthRequired: Boolean(app.authRequired),\n\t\tlogo: app.logo || '', title: app.title || '', company: app.company || '',\n\t\ttype: app.type || '', application: app.id || '',\n\t\thelp: app.help || '',\n\t\tuserMenus: app.userMenus || [],\n\t};\n\n}\nconst router = new ApiRouter();\nrouter.get(async ctx => {\n\tconst searchParams = ctx.url.searchParams;\n\tconst domain = searchParams.get('domain') || '';\n\tconst port = searchParams.get('port') || '';\n\tconst path = searchParams.get('path') || '';\n\tconst model = await getModel('application');\n\tif (!model) { return defaultConfiguration(domain, port); }\n\n\tconst database = useDatabase(model.databaseId);\n\n\n\tconst domainType = model.fields.domain?.type;\n\tconst portType = model.fields.port?.type;\n\tconst pathType = model.fields.path?.type;\n\tlet sql = new Query(model, true);\n\tif (domainType && typeof domainType === 'string') {\n\t\tif (domain) {\n\t\t\tsql = sql.where('domain', 'in', ['', domain]);\n\t\t} else {\n\t\t\tsql = sql.where('domain', '');\n\t\t}\n\t}\n\tif (portType && typeof portType === 'string') {\n\t\tif (port) {\n\t\t\tsql = sql.where('port', 'in', [0, port]);\n\t\t} else {\n\t\t\tsql = sql.where('port', 0);\n\t\t}\n\t}\n\tlet baseSql = sql.clone();\n\tif (pathType && typeof pathType === 'string') {\n\t\tconst allPaths = ['/'];\n\t\tfor (const paths = path.split('/').filter(Boolean); paths.length; paths.pop()) {\n\t\t\tallPaths.push(`/${paths.join('/')}/`);\n\t\t}\n\t\tbaseSql = baseSql.where('path', 'in', allPaths);\n\t}\n\tlet apps = await database.find(baseSql);\n\tif (!apps.length) {\n\t\tconst defaultType = model.fields.default?.type;\n\t\tconst singleDefaultType = await isSingleUser(true) && model.fields.singleDefault?.type;\n\t\tconst hasDefault = defaultType && typeof defaultType === 'string';\n\t\tconst hasSingleDefault = singleDefaultType && typeof singleDefaultType === 'string';\n\t\tif (hasDefault && hasSingleDefault) {\n\t\t\tapps = await database.find(sql.clone().where(Where.and('default', true).or('singleDefault', true)));\n\t\t} else if (hasDefault) {\n\t\t\tapps = await database.find(sql.clone().where('default', true));\n\t\t} else if (hasSingleDefault) {\n\t\t\tapps = await database.find(sql.clone().where('singleDefault', true));\n\t\t}\n\t\tif (apps.length > 1) {\n\t\t\tapps = apps.sort((a, b) => Number(b.singleDefault) - Number(a.singleDefault)).slice(0, 1);\n\t\t}\n\t}\n\tconst app = apps.sort((a, b) => {\n\t\tconst ak = (a.domain ? 2 ** 26 : 0) + (a.port ? 2 ** 25 : 0) + a.path.length;\n\t\tconst bk = (b.domain ? 2 ** 26 : 0) + (b.port ? 2 ** 25 : 0) + b.path.length;\n\t\treturn bk - ak;\n\t})[0];\n\tif (!app) { return defaultConfiguration(domain, port); }\n\n\treturn createConfiguration(app);\n});\nexport default router;\n","import { ApiRouter, Param } from '@yongdall/http';\nimport { Query } from '@yongdall/model';\nimport { getModel } from '@yongdall/core';\nimport { useDatabase } from '@yongdall/connection';\n\n\nconst type = new Param();\nconst group = new Param();\n/**\n * \n * @param {string | string[]} type \n * @param {string | string[]} [group] \n * @returns \n */\nasync function getMenus(type, group = '') {\n\tconst model = await getModel('menu');\n\tif (!model) {\n\t\treturn []\n\t}\n\n\tconst database = useDatabase(model.databaseId);\n\tlet sql = new Query(model, true);\n\tsql = sql.where('groupType', type);\n\tsql = sql.where('group', group);\n\tsql = sql.sort('no');\n\treturn await database.find(sql);\n}\n\nconst router = new ApiRouter();\nrouter.get`${type}`(async ctx => {\n\treturn {menus: await getMenus(type.param(ctx) || '')};\n});\nrouter.get`${type}/groups/${group}`(async ctx => {\n\treturn {menus: await getMenus(type.param(ctx) || '', group.param(ctx) || '')};\n\n});\nexport default router;\n","import { ApiRouter } from '@yongdall/http';\nimport { getUser, isSingleUser, loadUser, setUser } from '@yongdall/core';\n\nconst userRouter = new ApiRouter();\n\n\nuserRouter.get(async ctx => {\n\tconst sessionUserId = await getUser(true);\n\tconst sessionUser = sessionUserId && await loadUser(sessionUserId, true);\n\tconst targetUserId = sessionUserId || await isSingleUser(true) ? await getUser(false) : null;\n\tconst targetUser = targetUserId && await loadUser(targetUserId, true);\n\treturn {\n\t\tsession: sessionUser,\n\t\ttarget: targetUser,\n\t};\n});\n\nuserRouter.delete(async ctx => {\n\tawait setUser(null);\n\tctx.status = 204;\n});\n\nexport default userRouter;\n","import { ApiRouter, Param } from '@yongdall/http';\nimport { getEnumerations } from '@yongdall/core';\n\n\nconst name = new Param();\n\nconst router = new ApiRouter();\nrouter.get`${name}`(async ctx => {\n\treturn {values: await getEnumerations(name.param(ctx) || '')};\n});\nexport default router;\n","import { ApiRouter, Param } from '@yongdall/http';\nimport { Query } from '@yongdall/model';\nimport { getModel } from '@yongdall/core';\nimport { useDatabase } from '@yongdall/connection';\nimport { e404 } from '@yongdall/http';\n\n\nconst name = new Param();\n\nconst router = new ApiRouter();\nrouter.get`${name}`(async ctx => {\n\tconst searchParams = ctx.url.searchParams;\n\tconst model = searchParams.get('model') || '';\n\tconst organization = searchParams.get('organization') || '';\n\tconst user = searchParams.get('user') || '';\n\tconst workspace = searchParams.get('workspace') || '';\n\tconst page = searchParams.get('page') || '';\n\tif (!page) { return e404(ctx); }\n\tif (!model && !organization && !user && !workspace) { return e404(ctx); }\n\t\n\n\tconst pageModel = await getModel('formLayout');\n\tif (!pageModel) {\n\t\tctx.status = 404;\n\t\treturn\n\t}\n\n\tlet sql = new Query(pageModel, true).select('layout', 'type').where('id', name.param(ctx) || '')\n\tconst database = useDatabase(pageModel.databaseId);\n\tlet define = await database.first(sql);\n\tif (!define) { ctx.status = 404; }\n\treturn define;\n});\nexport default router;\n","import { getModel } from '@yongdall/core';\nimport { useDatabase } from '@yongdall/connection';\nimport { Query, Where } from '@yongdall/model';\nimport { ApiRouter } from '@yongdall/http';\n\nconst router = new ApiRouter();\nrouter.get(async ctx => {\n\n\tconst PermissionModel = await getModel('permission');\n\tif (!PermissionModel) { return []; }\n\n\tconst data = await useDatabase(PermissionModel.databaseId).find(\n\t\tnew Query(PermissionModel, true),\n\t);\n\tif (!data.length) { return []; }\n\n\n\tconst permissionMap = Object.groupBy(data, v => v.groupId);\n\tconst groupIds = Object.keys(permissionMap).filter(Boolean);\n\tconst PermissionGroupModel = await getModel('permissionGroup');\n\tconst groups = groupIds.length && PermissionGroupModel ? Object.fromEntries(await useDatabase(PermissionGroupModel.databaseId).find(\n\t\tnew Query(PermissionGroupModel, true).where(Where.and('id', 'in', groupIds)),\n\t).then(v => v.map(v => [v.id, v.label]))) : {};\n\n\t/** @type {{children: {value: string; label: string}[]; label: string}[]} */\n\tconst allPermissions = [];\n\tfor (const [group, permissions] of Object.entries(permissionMap)) {\n\t\tif (!permissions?.length) { continue; }\n\t\tconst list = permissions.map(({ label, id }) => ({ label, value: id }));\n\t\tif (!list.length) { continue; }\n\t\tallPermissions.push({ label: `${Object.hasOwn(groups, group) && groups[group] || group}`, children: list });\n\t}\n\treturn allPermissions;\n});\n\nexport default router;\n","import pageRouter from './page.mjs';\nimport applicationRouter from './application.mjs';\nimport menusRouter from './menus.mjs';\nimport userRouter from './user.mjs';\nimport enumerationsRouter from './enumerations.mjs';\nimport formLayoutsRouter from './formLayouts.mjs';\nimport permissionsRouter from './permissions.mjs';\n\nexport const api = {\n\tpage: pageRouter,\n\tuser: userRouter,\n\tmenus: menusRouter,\n\tapplication: applicationRouter,\n\tenumerations: enumerationsRouter,\n\tformLayouts: formLayoutsRouter,\n\tpermissions: permissionsRouter,\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"routers.yongdall.mjs","names":["router","router","router","name","router","router","pageRouter","userRouter","menusRouter","applicationRouter","enumerationsRouter","formLayoutsRouter","permissionsRouter"],"sources":["../../api/api/routers/page.mjs","../../api/api/routers/application.mjs","../../api/api/routers/menus.mjs","../../api/api/routers/user.mjs","../../api/api/routers/enumerations.mjs","../../api/api/routers/formLayouts.mjs","../../api/api/routers/permissions.mjs","../../api/api/routers/index.mjs"],"sourcesContent":["import { ApiRouter } from '@yongdall/http';\nimport { Query, Where } from '@yongdall/model';\nimport { getModel } from '@yongdall/core';\nimport { useDatabase } from '@yongdall/connection';\nimport { e404 } from '@yongdall/http';\n\n\n\nconst router = new ApiRouter();\nrouter.get(async ctx => {\n\tconst searchParams = ctx.url.searchParams;\n\tconst applicationId = searchParams.get('application') || searchParams.get('applicationId') || '';\n\tconst model = searchParams.get('model') || '';\n\tconst organization = searchParams.get('organization') || '';\n\tconst user = searchParams.get('user') || '';\n\tconst workspace = searchParams.get('workspace') || '';\n\tconst page = searchParams.get('page') || '';\n\tif (!page) { return e404(ctx); }\n\tif (!model && !organization && !user && !workspace) { return e404(ctx); }\n\n\n\tconst pageModel = await getModel('page');\n\tif (!pageModel) {\n\t\tctx.status = 404;\n\t\treturn;\n\t}\n\n\tconst applicationKey = ['applicationId', 'application'].find(field => {\n\t\tconst type = pageModel.fields[field]?.type;\n\t\treturn type && typeof type === 'string';\n\t});\n\n\tlet sql = new Query(pageModel, true)\n\t\t.where('model', model)\n\t\t.where('organization', organization)\n\t\t.where('user', user)\n\t\t.where('workspace', workspace)\n\t\t.where('page', page)\n\t\t.where('current', true);\n\tif (applicationKey) {\n\t\tlet where = Where.and(applicationKey, null);\n\t\tsql = sql.where(\n\t\t\tapplicationId\n\t\t\t\t? where.or(applicationKey, applicationId)\n\t\t\t\t: where\n\t\t);\n\t}\n\tconst database = useDatabase(pageModel.databaseId);\n\tif (applicationKey && applicationId) {\n\t\tconst list = await database.find(sql);\n\t\tconst define = list.find(v => v[applicationKey]) || list[0];\n\t\tif (!define) { ctx.status = 404; }\n\t\treturn define;\n\t}\n\tlet define = await database.first(sql);\n\tif (!define) { ctx.status = 404; }\n\treturn define;\n});\nexport default router;\n","import { ApiRouter } from '@yongdall/http';\nimport { Query, Where } from '@yongdall/model';\nimport { bootConfiguration, getModel, isSingleUser, useTenant } from '@yongdall/core';\nimport { useDatabase } from '@yongdall/connection';\n/** @import { BootConfiguration } from '@yongdall/common' */\n\n/**\n * \n * @param {string} domain \n * @param {string | number} port \n * @returns {Promise<BootConfiguration>}\n */\nasync function defaultConfiguration(domain, port) {\n\treturn createConfiguration({\n\t\tdomain, port, path: bootConfiguration.path,\n\t\tauthRequired: bootConfiguration.authRequired,\n\t})\n\n}\n/**\n * \n * @param {Record<string, any>} app \n * @returns {Promise<BootConfiguration>}\n */\nasync function createConfiguration(app) {\n\treturn {\n\t\tsingle: await useTenant().then(v => Boolean(v.single)),\n\t\tpages: bootConfiguration.pages,\n\t\tconfigurationPages: bootConfiguration.configurationPages,\n\t\tdomain: app.domain, port: app.port, path: app.path,\n\t\troute: app.route || bootConfiguration.route,\n\t\ttheme: app.theme || bootConfiguration.theme,\n\t\tskin: app.skin || bootConfiguration.skin,\n\t\tauthenticator: app.authenticator || bootConfiguration.authenticator,\n\t\tauthRequired: Boolean(app.authRequired),\n\t\tlogo: app.logo || '', title: app.title || '', company: app.company || '',\n\t\ttype: app.type || '', application: app.id || '',\n\t\thelp: app.help || '',\n\t\tuserMenus: app.userMenus || [],\n\t};\n\n}\nconst router = new ApiRouter();\nrouter.get(async ctx => {\n\tconst searchParams = ctx.url.searchParams;\n\tconst domain = searchParams.get('domain') || '';\n\tconst port = searchParams.get('port') || '';\n\tconst path = searchParams.get('path') || '';\n\tconst model = await getModel('application');\n\tif (!model) { return defaultConfiguration(domain, port); }\n\n\tconst database = useDatabase(model.databaseId);\n\n\n\tconst domainType = model.fields.domain?.type;\n\tconst portType = model.fields.port?.type;\n\tconst pathType = model.fields.path?.type;\n\tlet sql = new Query(model, true);\n\tif (domainType && typeof domainType === 'string') {\n\t\tif (domain) {\n\t\t\tsql = sql.where('domain', 'in', ['', domain]);\n\t\t} else {\n\t\t\tsql = sql.where('domain', '');\n\t\t}\n\t}\n\tif (portType && typeof portType === 'string') {\n\t\tif (port) {\n\t\t\tsql = sql.where('port', 'in', [0, port]);\n\t\t} else {\n\t\t\tsql = sql.where('port', 0);\n\t\t}\n\t}\n\tlet baseSql = sql.clone();\n\tif (pathType && typeof pathType === 'string') {\n\t\tconst allPaths = ['/'];\n\t\tfor (const paths = path.split('/').filter(Boolean); paths.length; paths.pop()) {\n\t\t\tallPaths.push(`/${paths.join('/')}/`);\n\t\t}\n\t\tbaseSql = baseSql.where('path', 'in', allPaths);\n\t}\n\tlet apps = await database.find(baseSql);\n\tif (!apps.length) {\n\t\tconst defaultType = model.fields.default?.type;\n\t\tconst singleDefaultType = await isSingleUser(true) && model.fields.singleDefault?.type;\n\t\tconst hasDefault = defaultType && typeof defaultType === 'string';\n\t\tconst hasSingleDefault = singleDefaultType && typeof singleDefaultType === 'string';\n\t\tif (hasDefault && hasSingleDefault) {\n\t\t\tapps = await database.find(sql.clone().where(Where.and('default', true).or('singleDefault', true)));\n\t\t} else if (hasDefault) {\n\t\t\tapps = await database.find(sql.clone().where('default', true));\n\t\t} else if (hasSingleDefault) {\n\t\t\tapps = await database.find(sql.clone().where('singleDefault', true));\n\t\t}\n\t\tif (apps.length > 1) {\n\t\t\tapps = apps.sort((a, b) => Number(b.singleDefault) - Number(a.singleDefault)).slice(0, 1);\n\t\t}\n\t}\n\tconst app = apps.sort((a, b) => {\n\t\tconst ak = (a.domain ? 2 ** 26 : 0) + (a.port ? 2 ** 25 : 0) + a.path.length;\n\t\tconst bk = (b.domain ? 2 ** 26 : 0) + (b.port ? 2 ** 25 : 0) + b.path.length;\n\t\treturn bk - ak;\n\t})[0];\n\tif (!app) { return defaultConfiguration(domain, port); }\n\n\treturn createConfiguration(app);\n});\nexport default router;\n","import { ApiRouter, Param } from '@yongdall/http';\nimport { Query } from '@yongdall/model';\nimport { getModel } from '@yongdall/core';\nimport { useDatabase } from '@yongdall/connection';\n\n\nconst type = new Param();\nconst group = new Param();\n/**\n * \n * @param {string | string[]} type \n * @param {string | string[]} [group] \n * @returns \n */\nasync function getMenus(type, group = '') {\n\tconst model = await getModel('menu');\n\tif (!model) {\n\t\treturn []\n\t}\n\n\tconst database = useDatabase(model.databaseId);\n\tlet sql = new Query(model, true);\n\tsql = sql.where('groupType', type);\n\tsql = sql.where('group', group);\n\tsql = sql.sort('no');\n\treturn await database.find(sql);\n}\n\nconst router = new ApiRouter();\nrouter.get`${type}`(async ctx => {\n\treturn {menus: await getMenus(type.param(ctx) || '')};\n});\nrouter.get`${type}/groups/${group}`(async ctx => {\n\treturn {menus: await getMenus(type.param(ctx) || '', group.param(ctx) || '')};\n\n});\nexport default router;\n","import { ApiRouter } from '@yongdall/http';\nimport { getUser, isSingleUser, loadUser, setUser } from '@yongdall/core';\n\nconst userRouter = new ApiRouter();\n\n\nuserRouter.get(async ctx => {\n\tconst sessionUserId = await getUser(true);\n\tconst sessionUser = sessionUserId && await loadUser(sessionUserId, true);\n\tconst targetUserId = sessionUserId || await isSingleUser(true) ? await getUser(false) : null;\n\tconst targetUser = targetUserId && await loadUser(targetUserId, true);\n\treturn {\n\t\tsession: sessionUser,\n\t\ttarget: targetUser,\n\t};\n});\n\nuserRouter.delete(async ctx => {\n\tawait setUser(null);\n\tctx.status = 204;\n});\n\nexport default userRouter;\n","import { ApiRouter, Param } from '@yongdall/http';\nimport { getEnumerations } from '@yongdall/core';\n\n\nconst name = new Param();\n\nconst router = new ApiRouter();\nrouter.get`${name}`(async ctx => {\n\treturn {values: await getEnumerations(name.param(ctx) || '')};\n});\nexport default router;\n","import { ApiRouter, Param } from '@yongdall/http';\nimport { Query } from '@yongdall/model';\nimport { getModel } from '@yongdall/core';\nimport { useDatabase } from '@yongdall/connection';\nimport { e404 } from '@yongdall/http';\n\n\nconst name = new Param();\n\nconst router = new ApiRouter();\nrouter.get`${name}`(async ctx => {\n\tconst searchParams = ctx.url.searchParams;\n\tconst model = searchParams.get('model') || '';\n\tconst organization = searchParams.get('organization') || '';\n\tconst user = searchParams.get('user') || '';\n\tconst workspace = searchParams.get('workspace') || '';\n\tconst page = searchParams.get('page') || '';\n\tif (!page) { return e404(ctx); }\n\tif (!model && !organization && !user && !workspace) { return e404(ctx); }\n\t\n\n\tconst pageModel = await getModel('formLayout');\n\tif (!pageModel) {\n\t\tctx.status = 404;\n\t\treturn\n\t}\n\n\tlet sql = new Query(pageModel, true).select('layout', 'type').where('id', name.param(ctx) || '')\n\tconst database = useDatabase(pageModel.databaseId);\n\tlet define = await database.first(sql);\n\tif (!define) { ctx.status = 404; }\n\treturn define;\n});\nexport default router;\n","import { getModel } from '@yongdall/core';\nimport { useDatabase } from '@yongdall/connection';\nimport { Query, Where } from '@yongdall/model';\nimport { ApiRouter } from '@yongdall/http';\n\nconst router = new ApiRouter();\nrouter.get(async ctx => {\n\n\tconst PermissionModel = await getModel('permission');\n\tif (!PermissionModel) { return []; }\n\n\tconst data = await useDatabase(PermissionModel.databaseId).find(\n\t\tnew Query(PermissionModel, true),\n\t);\n\tif (!data.length) { return []; }\n\n\n\tconst permissionMap = Object.groupBy(data, v => v.groupId);\n\tconst groupIds = Object.keys(permissionMap).filter(Boolean);\n\tconst PermissionGroupModel = await getModel('permissionGroup');\n\tconst groups = groupIds.length && PermissionGroupModel ? Object.fromEntries(await useDatabase(PermissionGroupModel.databaseId).find(\n\t\tnew Query(PermissionGroupModel, true).where(Where.and('id', 'in', groupIds)),\n\t).then(v => v.map(v => [v.id, v.label]))) : {};\n\n\t/** @type {{children: {value: string; label: string}[]; label: string}[]} */\n\tconst allPermissions = [];\n\tfor (const [group, permissions] of Object.entries(permissionMap)) {\n\t\tif (!permissions?.length) { continue; }\n\t\tconst list = permissions.map(({ label, id }) => ({ label, value: id }));\n\t\tif (!list.length) { continue; }\n\t\tallPermissions.push({ label: `${Object.hasOwn(groups, group) && groups[group] || group}`, children: list });\n\t}\n\treturn allPermissions;\n});\n\nexport default router;\n","import pageRouter from './page.mjs';\nimport applicationRouter from './application.mjs';\nimport menusRouter from './menus.mjs';\nimport userRouter from './user.mjs';\nimport enumerationsRouter from './enumerations.mjs';\nimport formLayoutsRouter from './formLayouts.mjs';\nimport permissionsRouter from './permissions.mjs';\n\nexport const api = {\n\tpage: pageRouter,\n\tuser: userRouter,\n\tmenus: menusRouter,\n\tapplication: applicationRouter,\n\tenumerations: enumerationsRouter,\n\tformLayouts: formLayoutsRouter,\n\tpermissions: permissionsRouter,\n}\n"],"mappings":"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"}
|