增加店铺挑战的自定义题库功能
This commit is contained in:
parent
c5a27e30a2
commit
d9c533f146
@ -52,7 +52,7 @@ class PuzzleController extends BaseController{
|
|||||||
return record.toJson()
|
return record.toJson()
|
||||||
}
|
}
|
||||||
|
|
||||||
@permission('puzzle:read')
|
@permission('puzzle:edit')
|
||||||
@router('post /puzzle/save')
|
@router('post /puzzle/save')
|
||||||
async save(req: any) {
|
async save(req: any) {
|
||||||
let { _id, withNext } = req.params
|
let { _id, withNext } = req.params
|
||||||
@ -72,7 +72,7 @@ class PuzzleController extends BaseController{
|
|||||||
}
|
}
|
||||||
return record.toJson()
|
return record.toJson()
|
||||||
}
|
}
|
||||||
@permission('puzzle:read')
|
@permission('puzzle:delete')
|
||||||
@router('post /puzzle/:id/delete')
|
@router('post /puzzle/:id/delete')
|
||||||
async delete(req: any) {
|
async delete(req: any) {
|
||||||
let { id } = req.params
|
let { id } = req.params
|
||||||
|
@ -37,7 +37,7 @@ class ShopactivityController extends BaseController {
|
|||||||
return record.toJson()
|
return record.toJson()
|
||||||
}
|
}
|
||||||
|
|
||||||
@permission('activity:read')
|
@permission('activity:edit')
|
||||||
@router('post /activity/save')
|
@router('post /activity/save')
|
||||||
async save(req: any) {
|
async save(req: any) {
|
||||||
let { _id, withNext } = req.params
|
let { _id, withNext } = req.params
|
||||||
|
@ -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 {}
|
||||||
|
}
|
||||||
|
}
|
@ -8,6 +8,19 @@ import { BaseModule } from '../Base'
|
|||||||
import { noJson } from '../../decorators/nojson'
|
import { noJson } from '../../decorators/nojson'
|
||||||
import { Severity } from '@typegoose/typegoose/lib/internal/constants'
|
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 {
|
export class ExamRewardClass {
|
||||||
@prop()
|
@prop()
|
||||||
public id: number
|
public id: number
|
||||||
@ -89,6 +102,15 @@ export class ShopExamClass extends BaseModule {
|
|||||||
@prop({default: false})
|
@prop({default: false})
|
||||||
public active: boolean
|
public active: boolean
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 题目来源
|
||||||
|
* 0: 系统题目
|
||||||
|
* 1: 自定义
|
||||||
|
* @type {number}
|
||||||
|
*/
|
||||||
|
@prop({default: 0})
|
||||||
|
public source: number
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 是否删除
|
* 是否删除
|
||||||
* @type {boolean}
|
* @type {boolean}
|
||||||
@ -107,8 +129,11 @@ export class ShopExamClass extends BaseModule {
|
|||||||
@prop()
|
@prop()
|
||||||
public createdBy: string
|
public createdBy: string
|
||||||
|
|
||||||
|
@prop({type: [ShopPuzzleClass]})
|
||||||
|
public questions: ShopPuzzleClass[];
|
||||||
|
|
||||||
public static parseQueryParam(params) {
|
public static parseQueryParam(params) {
|
||||||
let {key, timeBegin, timeEnd, active, shop} = params
|
let {key, timeBegin, timeEnd, active, shop, source} = params
|
||||||
let opt: any = {deleted: false}
|
let opt: any = {deleted: false}
|
||||||
if (key) {
|
if (key) {
|
||||||
opt.name = {$regex: key, $options: 'i'}
|
opt.name = {$regex: key, $options: 'i'}
|
||||||
@ -123,6 +148,9 @@ export class ShopExamClass extends BaseModule {
|
|||||||
if (active != undefined) {
|
if (active != undefined) {
|
||||||
opt.active = active
|
opt.active = active
|
||||||
}
|
}
|
||||||
|
if (source != undefined) {
|
||||||
|
opt.source = source
|
||||||
|
}
|
||||||
if (shop) {
|
if (shop) {
|
||||||
opt.shop = shop
|
opt.shop = shop
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user