UNPKG

4.68 kBSource Map (JSON)View Raw
1{"version":3,"file":"index.js","sources":["../src/index.js"],"sourcesContent":["import mongooseHidden from \"mongoose-hidden\";\n\nexport function helper(schema, options) {\n // soft delete\n schema.add({ deleted: { type: Boolean, default: false, index: true } });\n schema.add({ deletedAt: { type: Date } });\n\n schema.loadClass(Base);\n\n // hidden _id in toJSON and toObject\n schema.plugin(mongooseHidden(), {\n hidden: { _id: true, deleted: true },\n });\n}\n\nexport const defaultOptions = {\n timestamps: { createdAt: \"createAt\", updatedAt: \"updateAt\" },\n toJSON: {\n virtuals: true,\n },\n toObject: {\n virtuals: true,\n },\n};\n\nclass Base {\n /**\n * Get by id\n * @param {string} id - The objectId of model.\n * @param {string?} populate - The objectId of model.\n * @returns {Promise<this>}\n */\n static get(id, populate = \"\") {\n return this.findById(id)\n .populate(populate)\n .exec();\n }\n\n /**\n * Soft delete document by id\n * @param id id of document\n * @returns {Promise<this>}\n */\n static softDelete(id) {\n return this.findByIdAndUpdate(\n id,\n { deletedAt: new Date(), deleted: true },\n { new: true }\n ).exec();\n }\n\n /**\n * Update or create object with given id\n * @param {*} id id of doc\n * @param {*} update body tobe updated\n * @returns {Promise<this>}\n */\n static upsert(id, update) {\n return this.findByIdAndUpdate(id, update, {\n new: true,\n upsert: true,\n setDefaultsOnInsert: true,\n }).exec();\n }\n\n /**\n * List documents\n * @param {Object} [conditions] - query condition.\n * @param {object} [conditions.filter] - mongo query.\n * @param {number} [conditions.lean] - return pure json.\n * @param {number} [conditions.limit] - limit number of docs to be returned.\n * @param {number} [conditions.offset] - number of docs to be skipped.\n * @param {string} [conditions.populate] - populate some reference fields.\n * @param {string} [conditions.select] - select fileds.\n * @param {string} [conditions.sort] - sort by.\n * @returns {Promise<Array<this>>}\n */\n static list({\n filter = {},\n lean = false,\n limit = 100,\n offset = 0,\n populate = \"\",\n select,\n sort = \"-updateAt\",\n //TODO: support grouup\n } = {}) {\n // default query not deleted docs\n if (!filter.deleted) filter.deleted = false;\n return this.find(filter)\n .sort(sort)\n .skip(Number(offset))\n .limit(Number(limit))\n .populate(populate)\n .select(select)\n .lean(lean)\n .exec();\n }\n\n /**\n * Count documents.\n * @param {object} filter - mongo query.\n * @returns {Promise<number>}\n */\n static count(filter = {}) {\n if (!filter.deleted) filter.deleted = false;\n return this.countDocuments(filter).exec();\n }\n\n /**\n * Soft delete.\n *\n * @returns {Promise<this>}\n */\n softDelete() {\n return this.set({\n deletedAt: new Date(),\n deleted: true,\n }).save();\n }\n\n /**\n * Get document back after soft removed.\n *\n * @returns {Promise<this>}\n */\n restore() {\n return this.set({\n deletedAt: undefined,\n deleted: undefined,\n }).save();\n }\n}\n"],"names":["Base","get","id","populate","this","findById","exec","softDelete","findByIdAndUpdate","deletedAt","Date","upsert","update","list","ref","filter","deleted","find","sort","skip","Number","offset","limit","select","lean","count","countDocuments","set","save","restore","undefined","schema","options","add","type","Boolean","default","index","loadClass","plugin","mongooseHidden","hidden","_id","timestamps","createdAt","updatedAt","toJSON","virtuals","toObject"],"mappings":"sFAyBMA,iBAOGC,aAAIC,EAAIC,yBAAW,IACjBC,KAAKC,SAASH,GAClBC,SAASA,GACTG,UAQEC,oBAAWL,UACTE,KAAKI,kBACVN,EACA,CAAEO,UAAW,IAAIC,cAAiB,GAClC,MAAO,IACPJ,UASGK,gBAAOT,EAAIU,UACTR,KAAKI,kBAAkBN,EAAIU,EAAQ,MACnC,UACG,uBACa,IACpBN,UAeEO,cAAKC,kBASR,kCARO,iCACF,gCACC,mCACC,mCACE,kDAEJ,aAIFC,EAAOC,UAASD,EAAOC,SAAU,GAC/BZ,KAAKa,KAAKF,GACdG,KAAKA,GACLC,KAAKC,OAAOC,IACZC,MAAMF,OAAOE,IACbnB,SAASA,GACToB,OAAOA,GACPC,KAAKA,GACLlB,UAQEmB,eAAMV,yBAAS,IACfA,EAAOC,UAASD,EAAOC,SAAU,GAC/BZ,KAAKsB,eAAeX,GAAQT,QAQrCC,YAAAA,6BACSH,KAAKuB,IAAI,CACdlB,UAAW,IAAIC,cACN,IACRkB,QAQLC,YAAAA,0BACSzB,KAAKuB,IAAI,gBACHG,eACFA,IACRF,uBAhIA,SAAgBG,EAAQC,GAE7BD,EAAOE,IAAI,CAAEjB,QAAS,CAAEkB,KAAMC,QAASC,SAAS,EAAOC,OAAO,KAC9DN,EAAOE,IAAI,CAAExB,UAAW,CAAEyB,KAAMxB,QAEhCqB,EAAOO,UAAUtC,GAGjB+B,EAAOQ,OAAOC,IAAkB,CAC9BC,OAAQ,CAAEC,KAAK,EAAM1B,SAAS,6BAIJ,CAC5B2B,WAAY,CAAEC,UAAW,WAAYC,UAAW,YAChDC,OAAQ,CACNC,UAAU,GAEZC,SAAU,CACRD,UAAU"}
\No newline at end of file