'use strict'; const config = require('config'); const getArchivePostIds = require('../archives/getArchivePostIds.js'); const curateUser = require('../curate/user.js'); const saveProfileDetails = require('../save/profileDetails.js'); function getUserPostsWrap(reddit, args) { return function getUserPosts(usernames) { return usernames.reduce((chain, username) => { return chain.then(accPosts => { return reddit.getUser(username).fetch().then(curateUser).then(saveProfileDetails).then(user => ({ user, accPosts })); }).then(({user, accPosts}) => { return reddit.getUser(username).getSubmissions({ sort: args.sort, limit: Infinity }).then(posts => ({ user, accPosts: accPosts.concat(posts) })); }).then(({user, accPosts}) => { if(args.archives || config.fetch.archives.search) { return getArchivePostIds(username, accPosts.map(post => post.id)).then(postIds => { return Promise.all(postIds.map(postId => { return reddit.getSubmission(postId).fetch(); })); }).then(archivedPosts => { return { user, accPosts: accPosts.concat(archivedPosts) }; }); } return {user, accPosts}; }).then(({user, accPosts}) => { return accPosts.map(post => Object.assign(post, {user})); }); }, Promise.resolve([])); }; }; module.exports = getUserPostsWrap;