card_info_svr/src/controllers/ActivityController.ts

57 lines
1.8 KiB
TypeScript

import BaseController from '../common/base.controller'
import { router } from '../decorators/router'
import { ActRecord } from '../models/ActRecord'
import { BaseConst } from '../constants/BaseConst'
import { ZError } from '../common/ZError'
import { ItemInfo } from '../logic/ItemDef'
import ItemCtrl from '../logic/ItemCtrl'
import { BagItem } from '../models/BagItem'
export default class ActivityController extends BaseController {
@router('post /api/:accountid/update_event')
async generalEvent(req: any) {
let { id,accountid } = req.params
let cfgMap = global.$cfg.get(BaseConst.INCOME)
id = +id
if (!cfgMap.has(id)) {
throw new ZError(11, 'no cfg found')
}
let cfg = cfgMap.get(id)
let day
if (cfg.repeat) {
day = (new Date()).format('yyyy-MM-dd', true)
} else {
day = (new Date(0)).format('yyyy-MM-dd', true)
}
let record = (await ActRecord.findOrCreate({accountid, actid: id, day})).doc
if (!cfg.repeat && record.count > 0) {
throw new ZError(12, 'already goted')
}
if (cfg.repeat && record.count >= cfg.frequency ) {
throw new ZError(13, 'reach today max count')
}
if (cfg.interval && (Date.now() - record.lasttime) < cfg.interval) {
throw new ZError(14, '操作太快了')
}
if (cfg.id == 9003 && record.count == 0) {
cfg = cfg.get(9004)
}
record.count += 1
record.lasttime = Date.now()
await record.save()
const itemInfos: ItemInfo[] = ItemCtrl.getItemsByInfo(cfg.income)
let results
if (id == 90001 || id == 90002) {
const account = req.user
results = await BagItem.parseCardItems(account, itemInfos)
await account.save()
} else {
await BagItem.addItems(accountid, itemInfos)
results = itemInfos
}
await record.save()
return results
}
}