* Copyright (c) 2023 - present TinyEngine Authors.
* Copyright (c) 2023 - present Huawei Cloud Computing Technologies Co., Ltd.
*
* Use of this source code is governed by an MIT-style license.
*
* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL,
* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR
* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS.
*
*/
import DateStore from '@seald-io/nedb'
import { getDatabasePath, getResponseData } from '../tool/Common'
const defaultModel = {
createdBy: '1',
lastUpdatedBy: '1',
tenantId: null,
renterId: null,
siteId: null,
appId: null,
platformId: 1,
nameCn: '',
nameEn: '',
version: '1.0.0',
modelUrl: 'https://agent-alpha.opentiny.design/platform-center/api/model-data',
parameters: [
{
prop: 'id',
isModel: false,
type: 'Number',
required: true,
description: '主键'
},
{
prop: 'name',
isModel: false,
type: 'String',
required: true,
description: '姓名'
},
{
prop: 'status',
isModel: false,
type: 'Enum',
options: '[{"value":"1","label":"已转正"},{"value":"0","label":"未转正"}]',
required: true,
description: '状态'
},
{
prop: 'test',
type: 'String',
required: false,
description: ''
}
],
method: [
{
name: '新增方法',
nameEn: 'insertApi',
requestParameters: [
{
prop: 'nameEn',
type: 'String'
},
{
prop: 'params',
type: 'Object',
children: [
{
prop: 'id',
isModel: false,
type: 'Number',
required: true,
description: '主键'
},
{
prop: 'name',
isModel: false,
type: 'String',
required: true,
description: '姓名'
},
{
prop: 'status',
isModel: false,
type: 'Enum',
options: '[{"value":"1","label":"已转正"},{"value":"0","label":"未转正"}]',
required: true,
description: '状态'
},
{
prop: 'test',
type: 'String',
required: false,
description: ''
}
]
}
],
responseParameters: [
{
prop: 'code',
type: 'Number'
},
{
prop: 'message',
type: 'String'
},
{
prop: 'data',
type: 'Enum'
}
]
},
{
name: '修改方法',
nameEn: 'updateApi',
requestParameters: [
{
prop: 'nameEn',
type: 'String'
},
{
prop: 'data',
type: 'Object',
children: [
{
prop: 'id',
isModel: false,
type: 'Number',
required: true,
description: '主键'
},
{
prop: 'name',
isModel: false,
type: 'String',
required: true,
description: '姓名'
},
{
prop: 'status',
isModel: false,
type: 'Enum',
options: '[{"value":"1","label":"已转正"},{"value":"0","label":"未转正"}]',
required: true,
description: '状态'
},
{
prop: 'test',
type: 'String',
required: false,
description: ''
}
]
},
{
prop: 'params',
type: 'Object',
children: [
{
prop: 'id',
isModel: false,
type: 'Number',
required: true,
description: '主键'
},
{
prop: 'name',
isModel: false,
type: 'String',
required: true,
description: '姓名'
},
{
prop: 'status',
isModel: false,
type: 'Enum',
options: '[{"value":"1","label":"已转正"},{"value":"0","label":"未转正"}]',
required: true,
description: '状态'
},
{
prop: 'test',
type: 'String',
required: false,
description: ''
}
]
}
],
responseParameters: [
{
prop: 'code',
type: 'Number'
},
{
prop: 'message',
type: 'String'
},
{
prop: 'data',
type: 'Enum'
}
]
},
{
name: '查询方法',
nameEn: 'queryApi',
requestParameters: [
{
prop: 'nameEn',
type: 'String'
},
{
prop: 'currentPage',
type: 'Number'
},
{
prop: 'pageSize',
type: 'Number'
},
{
prop: 'nameCn',
type: 'String'
},
{
prop: 'params',
type: 'Object',
children: [
{
prop: 'id',
isModel: false,
type: 'Number',
required: true,
description: '主键'
},
{
prop: 'name',
isModel: false,
type: 'String',
required: true,
description: '姓名'
},
{
prop: 'status',
isModel: false,
type: 'Enum',
options: '[{"value":"1","label":"已转正"},{"value":"0","label":"未转正"}]',
required: true,
description: '状态'
},
{
prop: 'test',
type: 'String',
required: false,
description: ''
}
]
}
],
responseParameters: [
{
prop: 'total',
type: 'Number'
},
{
prop: 'code',
type: 'Number'
},
{
prop: 'message',
type: 'String'
},
{
prop: 'data',
type: 'Enum'
}
]
},
{
name: '删除方法',
nameEn: 'deleteApi',
requestParameters: [
{
prop: 'nameEn',
type: 'String'
},
{
prop: 'id',
type: 'Number'
}
],
responseParameters: [
{
prop: 'code',
type: 'Number'
},
{
prop: 'message',
type: 'String'
},
{
prop: 'data',
type: 'Enum'
}
]
}
],
description: ''
}
export default class ModelService {
constructor() {
this.db = new DateStore({
filename: getDatabasePath('model.db'),
autoload: true
})
this.db.ensureIndex({
fieldName: '_id',
unique: true
})
this.modelList = []
}
async create(params) {
let mockId = this.modelList.length > 0 ? Math.max(...this.modelList.map((item) => item.id)) + 1 : 3
const newModel = {
...defaultModel,
id: mockId++,
created_at: new Date().toISOString(),
updated_at: new Date().toISOString(),
...params
}
this.db.insert(newModel)
this.modelList.push(newModel)
return getResponseData({ records: this.modelList })
}
async delete(id) {
const result = await this.db.findOneAsync({ id: Number(id) })
await this.db.removeAsync({ id: Number(id) })
return getResponseData(result)
}
async list() {
this.modelList = await this.db.findAsync()
return getResponseData({ records: this.modelList })
}
async update(id, params) {
await this.db.updateAsync({ id: Number(id) }, { $set: params })
const result = await this.db.findOneAsync({ id: Number(id) })
return getResponseData(result)
}
}