From 75932951283571e61f7ab8e4b87aaeb84571c012 Mon Sep 17 00:00:00 2001 From: zhl Date: Thu, 22 Apr 2021 14:32:27 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=B8=B8=E6=88=8F=E7=BC=96?= =?UTF-8?q?=E8=BE=91=E7=9B=B8=E5=85=B3api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/admin/controllers/account.controller.ts | 2 +- src/admin/controllers/article.controller.ts | 2 +- src/admin/controllers/coupon.controller.ts | 2 +- src/admin/controllers/game.controller.ts | 73 +++++++++++++++++++ src/admin/controllers/shop.controller.ts | 2 +- src/models/content/Game.ts | 79 +++++++++++++++++++++ 6 files changed, 156 insertions(+), 4 deletions(-) create mode 100644 src/admin/controllers/game.controller.ts create mode 100644 src/models/content/Game.ts diff --git a/src/admin/controllers/account.controller.ts b/src/admin/controllers/account.controller.ts index 4a3bc0a..9c523e3 100644 --- a/src/admin/controllers/account.controller.ts +++ b/src/admin/controllers/account.controller.ts @@ -126,7 +126,7 @@ class AccountController extends BaseController { } account.updatePassword(passwordNew) await account.save() - return {} + return account.toJson() } @permission('admin:delete') diff --git a/src/admin/controllers/article.controller.ts b/src/admin/controllers/article.controller.ts index e14de69..e932dcf 100644 --- a/src/admin/controllers/article.controller.ts +++ b/src/admin/controllers/article.controller.ts @@ -54,7 +54,7 @@ export class ArticleController extends BaseController { record.updateFromReq(req.params) } await record.save() - return {} + return record.toJson() } @permission('article:delete') diff --git a/src/admin/controllers/coupon.controller.ts b/src/admin/controllers/coupon.controller.ts index c3a1ad7..d9ad6ea 100644 --- a/src/admin/controllers/coupon.controller.ts +++ b/src/admin/controllers/coupon.controller.ts @@ -53,7 +53,7 @@ class CouponController extends BaseController{ record.updateFromReq(req.params) } await record.save() - return {} + return record.toJson() } @permission('coupon:read') @router('post /coupon/:id/delete') diff --git a/src/admin/controllers/game.controller.ts b/src/admin/controllers/game.controller.ts new file mode 100644 index 0000000..972b041 --- /dev/null +++ b/src/admin/controllers/game.controller.ts @@ -0,0 +1,73 @@ +import BaseController from '../../common/base.controller' +import { permission, router } from '../../decorators/router' +import { ZError } from '../../common/ZError' +import { Game } from '../../models/content/Game' + +class GameController extends BaseController{ + @permission('game:read') + @router('post /games') + async list(req, res) { + let { start, limit } = req.params + start = +start || 0 + limit = +limit || 10 + let { opt, sort } = Game.parseQueryParam(req.params) + let articles = await Game.find(opt) + .sort(sort) + .skip(start) + .limit(limit) + let count = await Game.count(opt) + let records = [] + for (let record of articles) { + records.push(record.toJson()) + } + return { + total: count, + start, + limit, + records + } + } + + @permission('game:read') + @router('get /game/:id') + async detail(req, res) { + let { id } = req.params + const record = await Game.findById(id) + if (!record) { + throw new ZError(11, 'record not found') + } + return record.toJson() + } + + @permission('game:read') + @router('post /game/save') + async save(req: any) { + let { _id } = req.params + let user = req.user + let record + if (!_id) { + record = new Game(req.params) + record.createdBy = user.id + } else { + record = await Game.findById(_id) + record.updateFromReq(req.params) + } + await record.save() + return record.toJson() + } + @permission('game:read') + @router('post /game/:id/delete') + async delete(req: any) { + let { id } = req.params + if (!id) { + throw new ZError(11, 'params mismatch') + } + await Game.findByIdAndUpdate(id, { + $set: { + deleted: true, + deleteTime: new Date() + } + }) + return {} + } +} diff --git a/src/admin/controllers/shop.controller.ts b/src/admin/controllers/shop.controller.ts index 5525eac..94c06a2 100644 --- a/src/admin/controllers/shop.controller.ts +++ b/src/admin/controllers/shop.controller.ts @@ -56,7 +56,7 @@ class ShopController extends BaseController { record.updateFromReq(req.params) } await record.save() - return {} + return record.toJson() } @permission('shop:delete') diff --git a/src/models/content/Game.ts b/src/models/content/Game.ts new file mode 100644 index 0000000..92c5b91 --- /dev/null +++ b/src/models/content/Game.ts @@ -0,0 +1,79 @@ +import { getModelForClass, modelOptions, prop } from '@typegoose/typegoose' +import { dbconn } from '../../decorators/dbconn' +import { BaseModule } from '../Base' +import { noJson } from '../../decorators/nojson' + +export class GameVersion { + /** + * 游戏类型 + * 0: 网页 + * 1: 微信小游戏 + * @type {number} + */ + @prop() + public type: number + + @prop() + public url: string + + @prop() + public appid: string + + @prop() + public image: string + + @prop() + public name: string + +} + +@dbconn() +@modelOptions({ schemaOptions: { collection: 'game_info', timestamps: true } }) +class GameClass extends BaseModule { + @prop({ required: true }) + public name!: string + + @prop({type: () => [GameVersion]}) + public versions: GameVersion[] + + /** + * 是否删除 + * @type {boolean} + */ + @noJson() + @prop({default: false}) + public deleted: boolean + @noJson() + @prop() + public deleteTime: Date + + /** + * 创建人 + * @type {string} + */ + @prop() + public createdBy: string + + public static parseQueryParam(params) { + let {key, timeBegin, timeEnd, shop} = params + let opt: any = {deleted: false} + if (key) { + opt.name = {$regex: key, $options: 'i'} + } + if (shop) { + opt.shop = shop + } + if (timeBegin && !timeEnd) { + opt.createdAt = {$gte: timeBegin}; + } else if (timeBegin && timeEnd) { + opt['$and'] = [{createdAt: {$gte: timeBegin}}, {createdAt: {$lte: timeEnd}}]; + } else if (!timeBegin && timeEnd) { + opt.createdAt = {$lte: timeEnd}; + } + + let sort = {_id: -1} + return { opt, sort } + } +} + +export const Game = getModelForClass(GameClass, { existingConnection: GameClass.db })