diff --git a/src/admin/controllers/puzzle.controller.ts b/src/admin/controllers/puzzle.controller.ts index e3faf22..efb3d37 100644 --- a/src/admin/controllers/puzzle.controller.ts +++ b/src/admin/controllers/puzzle.controller.ts @@ -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() + } } diff --git a/src/admin/controllers/tag.controller.ts b/src/admin/controllers/tag.controller.ts new file mode 100644 index 0000000..7f7737d --- /dev/null +++ b/src/admin/controllers/tag.controller.ts @@ -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 + } +} diff --git a/src/models/Tag.ts b/src/models/Tag.ts new file mode 100644 index 0000000..8d505d6 --- /dev/null +++ b/src/models/Tag.ts @@ -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 }) diff --git a/src/models/content/Puzzle.ts b/src/models/content/Puzzle.ts index eb709f6..eb656cd 100644 --- a/src/models/content/Puzzle.ts +++ b/src/models/content/Puzzle.ts @@ -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, id: string) { + return this.findOne({deleted: 0, is_hide: 0, _id: {$gt: id }}).exec() + } } export const Puzzle = getModelForClass(PuzzleClass, { existingConnection: PuzzleClass.db }) diff --git a/src/models/content/PuzzleCategory.ts b/src/models/content/PuzzleCategory.ts new file mode 100644 index 0000000..8600b88 --- /dev/null +++ b/src/models/content/PuzzleCategory.ts @@ -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 })