'use strict'; const assert = require('assert'); const _ = require('lodash'); const { BusinessError, ErrorCode } = require('naf-core').Error; const { isNullOrUndefined, trimData } = require('naf-core').Util; const { CrudService } = require('naf-framework-mongoose/lib/service'); class MenuService extends CrudService { constructor(ctx) { super(ctx); this.model = this.ctx.model.Menu; } async create({ site }, { title, type, is_use, url, content_id}) { // 检查数据 assert(_.isString(site), 'site不能为空'); assert(!title || _.isString(title), 'title必须为字符串'); assert(!type || _.isString(type), 'type必须为字符串'); assert(!is_use || _.isString(is_use), 'is_use必须为字符串'); assert(!url || _.isString(url), 'url必须为字符串'); assert(!content_id || _.isString(content_id), 'content_id必须为字符串'); // TODO: 检查用户信息 const userid = this.ctx.userid; if (!_.isString(userid)) throw new BusinessError(ErrorCode.NOT_LOGIN); // TODO:保存数据 const data = { site, title, type, is_use, url, content_id, meta: { createdBy: userid }, }; const res = await this.model.create(data); return res; } async update({ id }, payload) { // 检查数据 const { title, type, is_use, url, content_id} = payload; assert(id, 'id不能为空'); assert(!title || _.isString(title), 'title必须为字符串'); assert(!type || _.isString(type), 'type必须为字符串'); assert(!is_use || _.isString(is_use), 'is_use必须为字符串'); assert(!url || _.isString(url), 'url必须为字符串'); assert(!content_id || _.isString(content_id), 'content_id必须为字符串'); // TODO: 检查用户信息 const userid = this.ctx.userid; if (!_.isString(userid)) throw new BusinessError(ErrorCode.NOT_LOGIN); // TODO:检查数据是否存在 const doc = await this.model.findById(id).exec(); if (isNullOrUndefined(doc)) { throw new BusinessError(ErrorCode.DATA_NOT_EXIST); } // TODO:保存数据 const data = trimData(payload); await this.model.findByIdAndUpdate(doc.id, { ...data, 'meta.updatedBy': userid }, { new: true }).exec(); const res = this.model.findById(id, '+name').exec(); return res; } async status({ id, state }) { // TODO: 检查数据状态 const doc = await this.model.findById(id).exec(); if (!doc) { throw new BusinessError(ErrorCode.DATA_NOT_EXIST); } doc.meta.state = state; return await doc.save(); } async delete({ id }) { return await this.status({ id, state: 1 }); } async restore({ id }) { return await this.status({ id, state: 0 }); } } module.exports = MenuService;