增加店铺挑战的自定义题库功能

This commit is contained in:
zhl 2021-05-18 10:26:17 +08:00
parent c5a27e30a2
commit d9c533f146
4 changed files with 104 additions and 4 deletions

View File

@ -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

View File

@ -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

View File

@ -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 {}
}
}

View File

@ -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
}