From 26f59b13b2e9fa0a265c747e1da0a402feba35f6 Mon Sep 17 00:00:00 2001 From: zhl Date: Mon, 25 Jan 2021 21:01:57 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86=E5=88=86=E8=A7=A3=E5=8D=A1=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=E5=90=8C=E6=97=B6=E5=88=86=E8=A7=A3=E5=A4=9A=E4=B8=AA?= =?UTF-8?q?=E5=8D=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/config.json | 2 +- docs/api.md | 9 +++-- src/controllers/CardController.ts | 57 ++++++++++++++++++++----------- 3 files changed, 43 insertions(+), 25 deletions(-) diff --git a/config/config.json b/config/config.json index 6bf5d35..7805194 100644 --- a/config/config.json +++ b/config/config.json @@ -1,5 +1,5 @@ { "redis": "redis://127.0.0.1:6379/15", - "db_main": "mongodb://192.168.100.24/card-development", + "db_main": "mongodb://127.0.0.1/card-development", "port": 2987 } diff --git a/docs/api.md b/docs/api.md index 6ce9a97..249d6ab 100644 --- a/docs/api.md +++ b/docs/api.md @@ -431,10 +431,10 @@ > POST参数 -| 字段 | 说明 | -| -------- | -------------------------------------- | -| cardid |卡牌id | -| count |使用数量 | +| 字段 | | 说明 | +| -------- |--| -------------------------------------- | +|cards |cardid |卡牌id | +| |count |使用数量 | 3. Response: JSON @@ -443,7 +443,6 @@ { "id": 0, //道具id "count": 0, //道具数量 - "type": 1 //道具类型 }, ] diff --git a/src/controllers/CardController.ts b/src/controllers/CardController.ts index 4b079bf..d9df71d 100644 --- a/src/controllers/CardController.ts +++ b/src/controllers/CardController.ts @@ -231,30 +231,49 @@ export default class CardController extends BaseController { } @router('post /api/:accountid/card/destory') - async destoryCard(req: any) { - let { cardid, count, accountid } = req.params - let record = await BagItem.findOne({ - accountid, - itemid: cardid, - itemtype: ItemType.CARD - }) - if (!record) { - throw new ZError(11, 'item not found') + async destoryCards(req: any) { + let {cards, accountid} = req.params + let resultMap: Map = new Map() + let typeMap: Map = new Map() + let records: any[] = [] + for (let card of cards) { + let record = await BagItem.findOne({ + accountid, + itemid: card.cardid, + itemtype: ItemType.CARD + }) + if (!record) { + throw new ZError(11, 'item not found') + } + if (record.count < card.count) { + throw new ZError(12, 'not enough item') + } + record.count -= card.count + let data = ItemCtrl.decomposeItemCard(card.cardid, card.count) + for (let obj of data) { + resultMap.inc(obj.id, obj.count) + typeMap.set(obj.id, obj.type) + } + records.push(record) + } - if (record.count < count) { - throw new ZError(12, 'not enough item') - } - let data = ItemCtrl.decomposeItemCard(cardid, count) - for (let obj of data) { + let result: any = [] + for (let [id, count] of resultMap) { let item = (await BagItem.findOrCreate({ accountid, - itemid: obj.id, - itemtype: obj.type + itemid: id, + itemtype: typeMap.get(id) })).doc - item.count += obj.count + item.count += count + result.push({ + id, count + }) await item.save() } - await record.save() - return data + for (let record of records) { + await record.save() + } + + return result } }