diff --git a/src/api.server.ts b/src/api.server.ts index d852621..5b02566 100644 --- a/src/api.server.ts +++ b/src/api.server.ts @@ -137,7 +137,7 @@ export class ApiServer { self.registerRouter(); self.setErrHandler(); // self.setFormatSend(); - this.server.listen({port: config.api.port, host: config.api.host}, (err: any, address: any) => { + this.server.listen({port: config.api.port}, (err: any, address: any) => { if (err) { logger.log(err) process.exit(0) diff --git a/src/api/controllers/puzzle.controller.ts b/src/api/controllers/puzzle.controller.ts new file mode 100644 index 0000000..2bcff03 --- /dev/null +++ b/src/api/controllers/puzzle.controller.ts @@ -0,0 +1,48 @@ +import BaseController from '../../common/base.controller' +import { role, router } from '../../decorators/router' +import { Puzzle } from '../../models/content/Puzzle' +import { ZError } from '../../common/ZError' + +class PuzzleController extends BaseController { + @role('anon') + @router('post /puzzle/list') + async list(req, res) { + let { shop, level } = req.params + let count = 10 + let records = await Puzzle.aggregate([ + { $match: { status: 1, is_hide: 0, deleted: 0 } }, + { $sample: { size: count } } + ]).exec() + return records.map(o => { + let answers = [] + for (let i = 1; i <=4; i++) { + if (o[`a${i}`]) { + answers.push(o[`a${i}`]) + } + } + answers.randomSort() + return { + id: o._id, + title: o.question, + answers, + type: 1 + } + }) + } + + @role('anon') + @router('post /puzzle/answer') + async report(req, res) { + let { id, answer } = req.params + if (!id || !answer) { + throw new ZError(11, 'param mismatch') + } + let record = await Puzzle.findById(id) + if (!record) { + throw new ZError(12, 'question not found') + } + let result = record.a1 == answer ? 1 : 0 + + return {result} + } +}