Explorar o código

Impl findOneActiveTransferKey on TransferKeyModel & Improved type

Taichi Masuyama %!s(int64=3) %!d(string=hai) anos
pai
achega
2660e2c59e
Modificáronse 1 ficheiros con 21 adicións e 2 borrados
  1. 21 2
      packages/app/src/server/models/transfer-key.ts

+ 21 - 2
packages/app/src/server/models/transfer-key.ts

@@ -1,4 +1,4 @@
-import { Schema } from 'mongoose';
+import { Model, Schema, HydratedDocument } from 'mongoose';
 
 import { ITransferKey } from '~/interfaces/transfer-key';
 
@@ -7,7 +7,13 @@ import { getOrCreateModel } from '../util/mongoose-utils';
 
 const logger = loggerFactory('growi:models:transfer-key');
 
-const schema = new Schema<ITransferKey>({
+interface ITransferKeyMethods {
+  findOneActiveTransferKey(transferKeyString: string): Promise<HydratedDocument<ITransferKey, ITransferKeyMethods> | null>;
+}
+
+type TransferKeyModel = Model<ITransferKey, {}, ITransferKeyMethods>;
+
+const schema = new Schema<ITransferKey, TransferKeyModel, ITransferKeyMethods>({
   expireAt: { type: Date, default: () => new Date(), expires: '30m' },
   value: { type: String, unique: true },
 }, {
@@ -17,4 +23,17 @@ const schema = new Schema<ITransferKey>({
   },
 });
 
+schema.statics.findOneActiveTransferKey = async function(transferKeyString: string): Promise<HydratedDocument<ITransferKey, ITransferKeyMethods> | null> {
+  let tk: HydratedDocument<ITransferKey, ITransferKeyMethods> | null;
+  try {
+    tk = await this.findOne({ value: transferKeyString });
+  }
+  catch (err) {
+    logger.error(err);
+    throw err;
+  }
+
+  return tk;
+};
+
 export default getOrCreateModel('TransferKey', schema);