From cd26c1270f7cdf8a09bea5b56ded4d41b1bc4846 Mon Sep 17 00:00:00 2001 From: zhl Date: Wed, 9 Jun 2021 13:46:46 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=87=AA=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E7=9A=84insertOrUpdate=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/controllers/game_user.controller.ts | 2 +- src/api/controllers/shop.controller.ts | 6 +----- src/models/Base.ts | 12 +++++++++++- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/api/controllers/game_user.controller.ts b/src/api/controllers/game_user.controller.ts index daa47d2..ddd89fc 100644 --- a/src/api/controllers/game_user.controller.ts +++ b/src/api/controllers/game_user.controller.ts @@ -30,7 +30,7 @@ class GameUserController extends BaseController { obj.shop = shop.id Object.assign(obj, { $addToSet: { shops: shop.id } }) } - let user = await GameUser.findOneAndUpdate({ accountId }, obj, { upsert: true, new: true }) + let user = await GameUser.insertOrUpdate({ accountId }, obj) const token = await res.jwtSign({ id: user.id, accountId }) return { token } } diff --git a/src/api/controllers/shop.controller.ts b/src/api/controllers/shop.controller.ts index 76976bb..812713f 100644 --- a/src/api/controllers/shop.controller.ts +++ b/src/api/controllers/shop.controller.ts @@ -95,11 +95,7 @@ class ShopController extends BaseController { if (!shop) { throw new ZError(11, '未找到对应的店铺') } - await GameUser.findOneAndUpdate( - { accountId }, - { shop: shop.id, loginParams: sid.split('_').slice(1) }, - { upsert: true, new: true }, - ) + await GameUser.insertOrUpdate({ accountId }, { shop: shop.id, loginParams: sid.split('_').slice(1) }) rspData.gameCfg = {} if (!!shop.gameInfo) { let gameInfo = shop.gameInfo diff --git a/src/models/Base.ts b/src/models/Base.ts index 653cd28..84fefdd 100644 --- a/src/models/Base.ts +++ b/src/models/Base.ts @@ -1,12 +1,13 @@ import { FindOrCreate } from '@typegoose/typegoose/lib/defaultClasses' import { checkJson } from '../decorators/nojson' -import { plugin } from '@typegoose/typegoose' +import { plugin, ReturnModelType } from '@typegoose/typegoose' // @ts-ignore import findOrCreate from 'mongoose-findorcreate' import { Connection } from 'mongoose' import { ObjectId } from 'bson' import { isTrue } from '../utils/string.util' +import { AnyParamConstructor } from '@typegoose/typegoose/lib/types' const jsonExcludeKeys = ['updatedAt', '__v'] const saveExcludeKeys = ['createdAt', 'updatedAt', '__v', '_id'] @@ -23,6 +24,15 @@ export abstract class BaseModule extends FindOrCreate { } } + /** + * 插入或更新 + * @param condition + * @param data + */ + public static async insertOrUpdate(this: ReturnModelType>, condition: any, data: any) { + return this.findOneAndUpdate(condition, data, { upsert: true, new: true }) + } + public toJson() { let result: any = {} // @ts-ignore