diff --git a/src/admin/controllers/puzzle.controller.ts b/src/admin/controllers/puzzle.controller.ts index 0656623..4caa55b 100644 --- a/src/admin/controllers/puzzle.controller.ts +++ b/src/admin/controllers/puzzle.controller.ts @@ -52,7 +52,7 @@ class PuzzleController extends BaseController{ return record.toJson() } - @permission('puzzle:read') + @permission('puzzle:edit') @router('post /puzzle/save') async save(req: any) { let { _id, withNext } = req.params @@ -72,7 +72,7 @@ class PuzzleController extends BaseController{ } return record.toJson() } - @permission('puzzle:read') + @permission('puzzle:delete') @router('post /puzzle/:id/delete') async delete(req: any) { let { id } = req.params diff --git a/src/admin/controllers/shop_active.controller.ts b/src/admin/controllers/shop_active.controller.ts index 940e008..06c49df 100644 --- a/src/admin/controllers/shop_active.controller.ts +++ b/src/admin/controllers/shop_active.controller.ts @@ -37,7 +37,7 @@ class ShopactivityController extends BaseController { return record.toJson() } - @permission('activity:read') + @permission('activity:edit') @router('post /activity/save') async save(req: any) { let { _id, withNext } = req.params diff --git a/src/admin/controllers/shop_exam.controller.ts b/src/admin/controllers/shop_exam.controller.ts index e69de29..f645f61 100644 --- a/src/admin/controllers/shop_exam.controller.ts +++ b/src/admin/controllers/shop_exam.controller.ts @@ -0,0 +1,72 @@ +import BaseController from '../../common/base.controller' +import { permission, router } from '../../decorators/router' +import { ShopExam } from '../../models/shop/ShopExam' +import { ZError } from '../../common/ZError' + + +class ShopexamController extends BaseController { + @permission('shopexam:read') + @router('post /exams') + async list(req, res) { + let { start, limit, page } = req.params + limit = +limit || 10 + start = +start || (+page - 1) * limit|| 0 + let { opt, sort } = ShopExam.parseQueryParam(req.params) + let records = await ShopExam.find(opt) + .sort(sort) + .skip(start) + .limit(limit) + let count = await ShopExam.count(opt) + + return { + total: count, + start, + limit, + records + } + } + + @permission('shopexam:read') + @router('get /exam/:id') + async detail(req, res) { + let { id } = req.params + const record = await ShopExam.findById(id) + if (!record) { + throw new ZError(11, 'record not found') + } + return record.toJson() + } + + @permission('shopexam:edit') + @router('post /exam/save') + async save(req: any) { + let { _id, withNext } = req.params + let user = req.user + let record + if (!_id) { + record = new ShopExam(req.params) + record.createdBy = user.id + } else { + record = await ShopExam.findById(_id) + record.updateFromReq(req.params) + } + await record.save() + return record.toJson() + } + + @permission('shopexam:delete') + @router('post /exam/:id/delete') + async delete(req: any) { + let { id } = req.params + if (!id) { + throw new ZError(11, 'params mismatch') + } + await ShopExam.findByIdAndUpdate(id, { + $set: { + deleted: true, + deleteTime: new Date() + } + }) + return {} + } +} diff --git a/src/models/shop/ShopExam.ts b/src/models/shop/ShopExam.ts index 1b4ace0..6643b6c 100644 --- a/src/models/shop/ShopExam.ts +++ b/src/models/shop/ShopExam.ts @@ -8,6 +8,19 @@ import { BaseModule } from '../Base' import { noJson } from '../../decorators/nojson' import { Severity } from '@typegoose/typegoose/lib/internal/constants' +export class ShopPuzzleClass { + @prop() + public question: string + @prop() + public a1: string + @prop() + public a2: string + @prop() + public a3: string + @prop() + public a4: string +} + export class ExamRewardClass { @prop() public id: number @@ -89,6 +102,15 @@ export class ShopExamClass extends BaseModule { @prop({default: false}) public active: boolean + /** + * 题目来源 + * 0: 系统题目 + * 1: 自定义 + * @type {number} + */ + @prop({default: 0}) + public source: number + /** * 是否删除 * @type {boolean} @@ -107,8 +129,11 @@ export class ShopExamClass extends BaseModule { @prop() public createdBy: string + @prop({type: [ShopPuzzleClass]}) + public questions: ShopPuzzleClass[]; + public static parseQueryParam(params) { - let {key, timeBegin, timeEnd, active, shop} = params + let {key, timeBegin, timeEnd, active, shop, source} = params let opt: any = {deleted: false} if (key) { opt.name = {$regex: key, $options: 'i'} @@ -123,6 +148,9 @@ export class ShopExamClass extends BaseModule { if (active != undefined) { opt.active = active } + if (source != undefined) { + opt.source = source + } if (shop) { opt.shop = shop }