card_info_svr/src/controllers/CardController.ts
2021-01-07 20:02:53 +08:00

85 lines
2.7 KiB
TypeScript

import BaseController from "../common/base.controller";
import {router} from "../decorators/router";
import {CardGroup} from "../models/CardGroup";
import {ZError} from "../common/ZError";
import {Card} from "../models/subdoc/Card";
export default class CardController extends BaseController {
@router('post /api/:accountid/card_group/:heroid')
async cardGroupList(req: any) {
let {accountid, heroid} = req.params;
let query: any = {accountid: accountid, deleted: false};
if (heroid) {
query.heroid = parseInt(heroid);
}
let records = await CardGroup.find(query);
let result: any = [];
for (let record of records) {
let data: any = record.toJson();
result.push(data);
}
return result;
}
@router('post /api/:accountid/card_group/save/:gid')
async saveCardGroup(req: any) {
let {accountid, gid, heroid, selected, cards} = req.params;
if (!gid && !heroid) {
throw new ZError(101, 'gid和heroid不能同时为空');
}
if (selected && !heroid) {
throw new ZError(102, '要将某卡组设为selected, 必须同时传heroid');
}
let record;
if (gid) {
record = await CardGroup.findById(gid);
}
if (record && record.deleted) {
throw new ZError(103, '卡组已被删除');
}
if (!record) {
record = new CardGroup();
record.accountid = accountid;
record.isdefault = false;
}
if (selected) {
await CardGroup.updateMany({accountid,heroid}, {$set: {"selected": false}});
record.selected = true;
}
if (heroid) {
record.heroid = heroid;
}
if (cards) {
let datas: Card[] = [];
//TODO:: 设置真实的卡牌信息
for (let cardid of cards) {
let card = new Card();
card.cardid = cardid;
card.owned = true;
card.usetype = 0;
card.free = false;
datas.push(card);
}
record.cards = datas;
}
await record.save();
return record.toJson();
}
@router('post /api/:accountid/card_group/delete/:gid')
async deleteCardGroup(req: any) {
let {gid} = req.params;
let record = await CardGroup.findById(gid);
if (!record) {
throw new ZError(101, '未找到记录');
}
if (record && record.deleted) {
throw new ZError(103, '卡组已被删除');
}
record.deleted = true;
record.deletetime = new Date();
await record.save();
return {};
}
}