import BaseController from 'common/base.controller' import { permission, router } from 'decorators/router' import { Article } from 'models/content/Article' import { ZError } from '../../common/ZError' export class ArticleController extends BaseController { @permission('article:read') @router('post /articles') async query(req: any) { let { start, limit } = req.params start = +start || 0 limit = +limit || 10 let { opt, sort } = Article.parseQueryParam(req.params) let articles = await Article.find(opt) .sort(sort) .skip(start) .limit(limit) let count = await Article.count(opt) let records = [] for (let record of articles) { records.push(record.toJson()) } return { total: count, start, limit, records } } @permission('article:read') @router('get /article/:id') async detail(req: any) { let { id } = req.params const record = await Article.findById(id) if (!record) { throw new ZError(11, 'article not found') } return record.toJson() } @permission('article:edit') @router('post /article/save') async save(req: any) { let { _id } = req.params let user = req.user let record if (!_id) { record = new Article(req.params) record.createdBy = user.id } else { record = await Article.findById(_id) record.updateFromReq(req.params) } await record.save() return {} } @permission('article:delete') @router('post /article/:aid/delete') async delete(req: any) { let { id } = req.params if (!id) { throw new ZError(11, 'params mismatch') } await Article.findByIdAndUpdate(id, { $set: { deleted: true, deleteTime: new Date() } }) return {} } }