增加游戏编辑相关api
This commit is contained in:
parent
eaef5970b6
commit
7593295128
@ -126,7 +126,7 @@ class AccountController extends BaseController {
|
||||
}
|
||||
account.updatePassword(passwordNew)
|
||||
await account.save()
|
||||
return {}
|
||||
return account.toJson()
|
||||
}
|
||||
|
||||
@permission('admin:delete')
|
||||
|
@ -54,7 +54,7 @@ export class ArticleController extends BaseController {
|
||||
record.updateFromReq(req.params)
|
||||
}
|
||||
await record.save()
|
||||
return {}
|
||||
return record.toJson()
|
||||
}
|
||||
|
||||
@permission('article:delete')
|
||||
|
@ -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')
|
||||
|
73
src/admin/controllers/game.controller.ts
Normal file
73
src/admin/controllers/game.controller.ts
Normal file
@ -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 {}
|
||||
}
|
||||
}
|
@ -56,7 +56,7 @@ class ShopController extends BaseController {
|
||||
record.updateFromReq(req.params)
|
||||
}
|
||||
await record.save()
|
||||
return {}
|
||||
return record.toJson()
|
||||
}
|
||||
|
||||
@permission('shop:delete')
|
||||
|
79
src/models/content/Game.ts
Normal file
79
src/models/content/Game.ts
Normal file
@ -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 })
|
Loading…
x
Reference in New Issue
Block a user