| 
					
				 | 
			
			
				@@ -0,0 +1,102 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import async from "async"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { isAdminRequired } from "./hooks"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import moduleManager from "../../index"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const DBModule = moduleManager.modules.db; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const UtilsModule = moduleManager.modules.utils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const WSModule = moduleManager.modules.ws; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const CacheModule = moduleManager.modules.cache; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+CacheModule.runJob("SUB", { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	channel: "dataRequest.resolve", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	cb: dataRequestId => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		WSModule.runJob("EMIT_TO_ROOM", { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			room: "admin.users", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			args: ["event:admin.dataRequests.resolved", { data: { dataRequestId } }] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+export default { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 * Gets all unresolved data requests 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 * @param {object} session - the session object automatically added by the websocket 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 * @param {Function} cb - gets called with the result 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	index: isAdminRequired(async function index(session, cb) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		const dataRequestModel = await DBModule.runJob("GET_MODEL", { modelName: "dataRequest" }, this); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		async.waterfall( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			[ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				next => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					dataRequestModel.find({ resolved: false }).sort({ createdAt: "desc" }).exec(next); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			async (err, requests) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					err = await UtilsModule.runJob("GET_ERROR", { error: err }, this); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.log("ERROR", "DATA_REQUESTS_INDEX", `Indexing data requests failed. "${err}"`); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					return cb({ status: "error", message: err }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				this.log("SUCCESS", "DATA_REQUESTS_INDEX", `Indexing data requests successful.`, false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				return cb({ status: "success", data: { requests } }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 * Resolves a data request 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 * @param {object} session - the session object automatically added by the websocket 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 * @param {object} dataRequestId - the id of the data request to resolve 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 * @param {Function} cb - gets called with the result 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	resolve: isAdminRequired(async function update(session, dataRequestId, cb) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		const dataRequestModel = await DBModule.runJob("GET_MODEL", { modelName: "dataRequest" }, this); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		async.waterfall( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			[ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				next => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if (!dataRequestId || typeof dataRequestId !== "string") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						return next("Please provide a data request id."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					return next(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				next => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					dataRequestModel.updateOne({ _id: dataRequestId }, { resolved: true }, { upsert: true }, err => 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						next(err) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			async err => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					err = await UtilsModule.runJob("GET_ERROR", { error: err }, this); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.log( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						"ERROR", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						"DATA_REQUESTS_RESOLVE", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						`Resolving data request ${dataRequestId} failed for user "${session.userId}". "${err}"` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					return cb({ status: "error", message: err }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				CacheModule.runJob("PUB", { channel: "dataRequest.resolve", value: dataRequestId }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				this.log( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					"SUCCESS", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					"DATA_REQUESTS_RESOLVE", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					`Resolving data request "${dataRequestId}" successful for user ${session.userId}".` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				return cb({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					status: "success", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					message: "Successfully resolved data request." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 |