增加tag和题目的类型相关接口
This commit is contained in:
parent
4f17e9c6ec
commit
0634527146
@ -43,7 +43,7 @@ class PuzzleController extends BaseController{
|
||||
@permission('puzzle:read')
|
||||
@router('post /puzzle/save')
|
||||
async save(req: any) {
|
||||
let { _id } = req.params
|
||||
let { _id, withNext } = req.params
|
||||
let user = req.user
|
||||
let record
|
||||
if (!_id) {
|
||||
@ -54,6 +54,10 @@ class PuzzleController extends BaseController{
|
||||
record.updateFromReq(req.params)
|
||||
}
|
||||
await record.save()
|
||||
if (withNext) {
|
||||
let nextRecord = await Puzzle.nextQuestion(record.id)
|
||||
return nextRecord.toJson()
|
||||
}
|
||||
return record.toJson()
|
||||
}
|
||||
@permission('puzzle:read')
|
||||
@ -71,4 +75,14 @@ class PuzzleController extends BaseController{
|
||||
})
|
||||
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 { getModelForClass, modelOptions, prop } from '@typegoose/typegoose'
|
||||
import {
|
||||
getModelForClass,
|
||||
modelOptions,
|
||||
prop,
|
||||
ReturnModelType
|
||||
} from '@typegoose/typegoose'
|
||||
import { BaseModule } from '../Base'
|
||||
import { noJson } from '../../decorators/nojson'
|
||||
|
||||
@ -32,13 +37,20 @@ class PuzzleClass extends BaseModule {
|
||||
@noJson()
|
||||
@prop()
|
||||
public is_hide: number
|
||||
/**
|
||||
* 这个是tag
|
||||
* @type {string}
|
||||
*/
|
||||
|
||||
@prop()
|
||||
public group: string
|
||||
@prop({ type: () => [String] })
|
||||
public groups: string[]
|
||||
|
||||
@prop()
|
||||
public tag: string
|
||||
|
||||
@prop()
|
||||
public subtag: string
|
||||
|
||||
public static parseQueryParam(params) {
|
||||
let {key, timeBegin, timeEnd } = params
|
||||
let opt: any = {deleted: 0, is_hide: 0}
|
||||
@ -56,6 +68,10 @@ class PuzzleClass extends BaseModule {
|
||||
let sort = {_id: 1}
|
||||
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 })
|
||||
|
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