增加tag和题目的类型相关接口
This commit is contained in:
parent
4f17e9c6ec
commit
0634527146
@ -43,7 +43,7 @@ class PuzzleController extends BaseController{
|
|||||||
@permission('puzzle:read')
|
@permission('puzzle:read')
|
||||||
@router('post /puzzle/save')
|
@router('post /puzzle/save')
|
||||||
async save(req: any) {
|
async save(req: any) {
|
||||||
let { _id } = req.params
|
let { _id, withNext } = req.params
|
||||||
let user = req.user
|
let user = req.user
|
||||||
let record
|
let record
|
||||||
if (!_id) {
|
if (!_id) {
|
||||||
@ -54,6 +54,10 @@ class PuzzleController extends BaseController{
|
|||||||
record.updateFromReq(req.params)
|
record.updateFromReq(req.params)
|
||||||
}
|
}
|
||||||
await record.save()
|
await record.save()
|
||||||
|
if (withNext) {
|
||||||
|
let nextRecord = await Puzzle.nextQuestion(record.id)
|
||||||
|
return nextRecord.toJson()
|
||||||
|
}
|
||||||
return record.toJson()
|
return record.toJson()
|
||||||
}
|
}
|
||||||
@permission('puzzle:read')
|
@permission('puzzle:read')
|
||||||
@ -71,4 +75,14 @@ class PuzzleController extends BaseController{
|
|||||||
})
|
})
|
||||||
return {}
|
return {}
|
||||||
}
|
}
|
||||||
|
@permission('puzzle:read')
|
||||||
|
@router('post /nextpuzzle')
|
||||||
|
async next(req: any) {
|
||||||
|
let { id } = req.params
|
||||||
|
if (!id) {
|
||||||
|
throw new ZError(11, 'params mismatch')
|
||||||
|
}
|
||||||
|
let nextRecord = await Puzzle.nextQuestion(id)
|
||||||
|
return nextRecord.toJson()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
25
src/admin/controllers/tag.controller.ts
Normal file
25
src/admin/controllers/tag.controller.ts
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
import BaseController from '../../common/base.controller'
|
||||||
|
import { router } from '../../decorators/router'
|
||||||
|
import { Tag } from '../../models/Tag'
|
||||||
|
import { PuzzleCategory } from '../../models/content/PuzzleCategory'
|
||||||
|
|
||||||
|
class TagController extends BaseController{
|
||||||
|
@router('get /tags')
|
||||||
|
async list(req, res) {
|
||||||
|
let records = await Tag.find({})
|
||||||
|
return records.map(o=>o.name)
|
||||||
|
}
|
||||||
|
@router('post /tag/save')
|
||||||
|
async save(req) {
|
||||||
|
const { name } = req.params
|
||||||
|
let record = (await Tag.findOrCreate({name})).doc
|
||||||
|
await record.save()
|
||||||
|
return {}
|
||||||
|
}
|
||||||
|
|
||||||
|
@router('get /question/categorys')
|
||||||
|
async categoryList(req, res) {
|
||||||
|
let records = await PuzzleCategory.find({})
|
||||||
|
return records
|
||||||
|
}
|
||||||
|
}
|
18
src/models/Tag.ts
Normal file
18
src/models/Tag.ts
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
import { dbconn } from '../decorators/dbconn'
|
||||||
|
import {
|
||||||
|
getModelForClass,
|
||||||
|
index,
|
||||||
|
modelOptions,
|
||||||
|
prop
|
||||||
|
} from '@typegoose/typegoose'
|
||||||
|
import { BaseModule } from './Base'
|
||||||
|
|
||||||
|
@dbconn()
|
||||||
|
@index({'name': 1}, {unique: false})
|
||||||
|
@modelOptions({ schemaOptions: { collection: 'tags'}})
|
||||||
|
class TagClass extends BaseModule {
|
||||||
|
@prop({ required: true })
|
||||||
|
public name!: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export const Tag = getModelForClass(TagClass, { existingConnection: TagClass.db })
|
@ -1,5 +1,10 @@
|
|||||||
import { dbconn } from '../../decorators/dbconn'
|
import { dbconn } from '../../decorators/dbconn'
|
||||||
import { getModelForClass, modelOptions, prop } from '@typegoose/typegoose'
|
import {
|
||||||
|
getModelForClass,
|
||||||
|
modelOptions,
|
||||||
|
prop,
|
||||||
|
ReturnModelType
|
||||||
|
} from '@typegoose/typegoose'
|
||||||
import { BaseModule } from '../Base'
|
import { BaseModule } from '../Base'
|
||||||
import { noJson } from '../../decorators/nojson'
|
import { noJson } from '../../decorators/nojson'
|
||||||
|
|
||||||
@ -32,13 +37,20 @@ class PuzzleClass extends BaseModule {
|
|||||||
@noJson()
|
@noJson()
|
||||||
@prop()
|
@prop()
|
||||||
public is_hide: number
|
public is_hide: number
|
||||||
|
/**
|
||||||
|
* 这个是tag
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
|
||||||
@prop()
|
@prop({ type: () => [String] })
|
||||||
public group: string
|
public groups: string[]
|
||||||
|
|
||||||
@prop()
|
@prop()
|
||||||
public tag: string
|
public tag: string
|
||||||
|
|
||||||
|
@prop()
|
||||||
|
public subtag: string
|
||||||
|
|
||||||
public static parseQueryParam(params) {
|
public static parseQueryParam(params) {
|
||||||
let {key, timeBegin, timeEnd } = params
|
let {key, timeBegin, timeEnd } = params
|
||||||
let opt: any = {deleted: 0, is_hide: 0}
|
let opt: any = {deleted: 0, is_hide: 0}
|
||||||
@ -56,6 +68,10 @@ class PuzzleClass extends BaseModule {
|
|||||||
let sort = {_id: 1}
|
let sort = {_id: 1}
|
||||||
return { opt, sort }
|
return { opt, sort }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static async nextQuestion(this: ReturnModelType<typeof PuzzleClass>, id: string) {
|
||||||
|
return this.findOne({deleted: 0, is_hide: 0, _id: {$gt: id }}).exec()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const Puzzle = getModelForClass(PuzzleClass, { existingConnection: PuzzleClass.db })
|
export const Puzzle = getModelForClass(PuzzleClass, { existingConnection: PuzzleClass.db })
|
||||||
|
26
src/models/content/PuzzleCategory.ts
Normal file
26
src/models/content/PuzzleCategory.ts
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
import { dbconn } from '../../decorators/dbconn'
|
||||||
|
import { getModelForClass, modelOptions, prop } from '@typegoose/typegoose'
|
||||||
|
import { BaseModule } from '../Base'
|
||||||
|
|
||||||
|
class SubType {
|
||||||
|
@prop()
|
||||||
|
public _id: string
|
||||||
|
|
||||||
|
@prop()
|
||||||
|
public name: string
|
||||||
|
}
|
||||||
|
|
||||||
|
@dbconn('second')
|
||||||
|
@modelOptions({ schemaOptions: { collection: 'question_category' } })
|
||||||
|
class PuzzleCategoryClass extends BaseModule {
|
||||||
|
@prop()
|
||||||
|
public _id: string
|
||||||
|
|
||||||
|
@prop()
|
||||||
|
public name: string
|
||||||
|
|
||||||
|
@prop({type: () => [SubType]})
|
||||||
|
public children: SubType[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export const PuzzleCategory = getModelForClass(PuzzleCategoryClass, { existingConnection: PuzzleCategoryClass.db })
|
Loading…
x
Reference in New Issue
Block a user