From a5506b689e47cf4dfb3bf80e9d079972a45e4fb6 Mon Sep 17 00:00:00 2001 From: zhangminghua Date: Mon, 20 Mar 2023 11:40:32 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9A=82=E4=BA=A4=E8=B5=84=E6=BA=90=E7=9B=AE?= =?UTF-8?q?=E5=BD=95=E5=A2=9E=E5=88=A0=E6=94=B9=E6=9F=A5=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lib/controllers/latestMetadata/index.js | 115 ++++++++++++++++++ api/app/lib/routes/latestMetadata/index.js | 18 +++ 2 files changed, 133 insertions(+) create mode 100644 api/app/lib/controllers/latestMetadata/index.js create mode 100644 api/app/lib/routes/latestMetadata/index.js diff --git a/api/app/lib/controllers/latestMetadata/index.js b/api/app/lib/controllers/latestMetadata/index.js new file mode 100644 index 0000000..b45ba42 --- /dev/null +++ b/api/app/lib/controllers/latestMetadata/index.js @@ -0,0 +1,115 @@ +'use strict'; +//获取资源目录列表 +async function getResourceCatalog(ctx) { + try { + const models = ctx.fs.dc.models; + const rslt = await models.ResourceCatalog.findAll({ + order: [['id', 'asc']], + }); + ctx.status = 200; + ctx.body = rslt; + } catch (error) { + ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); + ctx.status = 400; + ctx.body = { + "message": "获取资源目录失败" + } + } +} +//新增资源目录 +async function postResourceCatalog(ctx) { + try { + const { name, code } = ctx.request.body; + const models = ctx.fs.dc.models; + const postOne = await models.ResourceCatalog.findOne({ + where: { $or: [{ name: name }, { code: code }] } + }); + if (postOne) { + ctx.status = 400; + ctx.body = { message: '该资源目录名称或代码已存在' } + } else { + await models.ResourceCatalog.create(ctx.request.body); + ctx.body = { message: '添加资源目录成功' } + ctx.status = 200; + } + } catch (error) { + ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); + ctx.status = 400; + ctx.body = { + "message": "添加资源目录失败" + } + } +} +//修改资源目录 +async function putResourceCatalog(ctx) { + try { + const { id } = ctx.params; + const { name, code, description } = ctx.request.body; + const models = ctx.fs.dc.models; + let resourceCatalogInfo = await models.ResourceCatalog.findOne({ where: { id } }); + if (resourceCatalogInfo) { + const putOne = await models.ResourceCatalog.findOne({ where: { id: { $not: id }, $or: [{ name: name }, { code: code }] } }); + if (putOne) { + ctx.status = 400; + ctx.body = { message: '该资源目录名称或代码已存在' } + } else { + await models.ResourceCatalog.update(ctx.request.body, { where: { id: id } }); + ctx.status = 200; + ctx.body = { message: '修改资源目录成功' } + } + } else { + ctx.status = 400; + ctx.body = { message: '该资源目录不存在' } + } + } catch (error) { + ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); + ctx.status = 400; + ctx.body = { + "message": "修改资源目录失败" + } + } +} +//删除资源目录 +async function delResourceCatalog(ctx) { + const transaction = await ctx.fs.dc.orm.transaction(); + try { + const models = ctx.fs.dc.models; + const { id } = ctx.params; + let resourceCatalogInfo = await models.ResourceCatalog.findOne({ where: { id } }); + if (resourceCatalogInfo) { + let childResourceCatalogInfo = await models.ResourceCatalog.findOne({ where: { parent: id } }); + let databaseInfo = await models.MetadataDatabase.findOne({ where: { catalog: id } }); + let fileInfo = await models.MetadataFile.findOne({ where: { catalog: id } }); + let restapiInfo = await models.MetadataRestapi.findOne({ where: { catalog: id } }); + if (childResourceCatalogInfo || databaseInfo || fileInfo || restapiInfo) { + ctx.status = 400; + ctx.body = { message: '存在关联子类目录或元数据,请删除相关数据,再删除该资源目录' } + deletable = false; + } + } + if (deletable) { + await models.ResourceCatalog.destroy({ + where: { id: id }, + transaction + }) + await transaction.commit(); + ctx.status = 200; + ctx.body = { message: '删除资源目录成功' } + + } else { + ctx.status = 400; + ctx.body = { message: '该资源目录不存在' } + } + } catch (error) { + await transaction.rollback(); + ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); + ctx.status = 400; + ctx.body = { message: '删除资源目录失败' } + } +} +module.exports = { + getResourceCatalog, + postResourceCatalog, + putResourceCatalog, + delResourceCatalog +} \ No newline at end of file diff --git a/api/app/lib/routes/latestMetadata/index.js b/api/app/lib/routes/latestMetadata/index.js new file mode 100644 index 0000000..8f3a33f --- /dev/null +++ b/api/app/lib/routes/latestMetadata/index.js @@ -0,0 +1,18 @@ +'use strict'; + +const latestMetadata = require('../../controllers/latestMetadata'); + +module.exports = function (app, router, opts) { + app.fs.api.logAttr['GET/resource-catalog'] = { content: '获取资源目录', visible: false }; + router.get('/resource-catalog', latestMetadata.getResourceCatalog); + + app.fs.api.logAttr['POST /resource-catalog'] = { content: '新增资源目录', visible: true }; + router.post('/resource-catalog', latestMetadata.postResourceCatalog); + + app.fs.api.logAttr['PUT /resource-catalog/:id'] = { content: '修改资源目录', visible: true }; + router.put('/resource-catalog/:id', latestMetadata.putResourceCatalog); + + app.fs.api.logAttr['DEL /resource-catalog/:id'] = { content: '删除资源目录', visible: true }; + router.delete('/resource-catalog/:id', latestMetadata.delResourceCatalog); + +}; \ No newline at end of file