import async from "async"; import CoreClass from "../core"; class ActivitiesModule extends CoreClass { constructor() { super("activities"); } initialize() { return new Promise(resolve => { this.db = this.moduleManager.modules.db; this.io = this.moduleManager.modules.io; this.utils = this.moduleManager.modules.utils; resolve(); }); } // TODO: Migrate ADD_ACTIVITY(payload) { // userId, activityType, payload return new Promise((resolve, reject) => { async.waterfall( [ next => { this.db .runJob("GET_MODEL", { modelName: "activity" }) .then(res => next(null, res)) .catch(next); }, (ActivityModel, next) => { const activity = new ActivityModel({ userId: payload.userId, activityType: payload.activityType, payload: payload.payload }); activity.save((err, activity) => { if (err) return next(err); return next(null, activity); }); }, (activity, next) => { this.utils .runJob("SOCKETS_FROM_USER", { userId: activity.userId }) .then(response => { response.sockets.forEach(socket => { socket.emit("event:activity.create", activity); }); next(); }) .catch(next); } ], async (err, activity) => { if (err) { err = await this.utils.runJob("GET_ERROR", { error: err }); reject(new Error(err)); } else { resolve({ activity }); } } ); }); } } export default new ActivitiesModule();