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