UNPKG

@speakr/speakr-module-services

Version:
110 lines (106 loc) 3 kB
"use strict"; const db = require('../../db'); /** * Creates an account and accountsNetworks for the influencer. * @param {Object} options - Object with data. * @param {string} options.influencers - The influencer for the account. * @param {string} options.platforms - The platform of the account. * @param {string} options.networks - The array of networks of the influencer. * @returns {Object} Object that contains the account and the accountsNetworks. */ module.exports = function (options) { let where = { platform_id: options.platforms.id, platform_user_id: options.id }; return db.accounts.findOne({ where, paranoid: false }) .then(accounts => { if (!!accounts) { if(accounts.deleted_at !== null) { return accounts.restore() .then(updatedAccounts => { return db.accounts.findOne({ where }) .then((accounts) => { return Promise.resolve(accounts); }) }) } else { return Promise.resolve(accounts); } } else { return db.accounts.create({ platform_id: options.platforms.id, platform_user_id: options.id }) } }) .then(accounts => { if (!!accounts) { return accounts.updateAttributes({ active: options.active, parent_id: options.parent_id, access_token: options.access_token, refresh_token: options.refresh_token, access_secret: options.access_secret, profile_link: options.profile_link, platform_user_image: options.platform_user_image, fair_offer_price: options.fair_offer_price, min_offer_price: options.min_offer_price, influencer_id: options.influencers.id, current_username: options.current_username, validated: options.validated, expired_access_token: false }); } return Promise.resolve(accounts); }) .then(accounts => { options.accounts = accounts; return Promise.resolve(options); }) .then(options => { const promises = options.networks.map(network => { return db.accounts_networks.findOne({ where: { account_id: options.accounts.id, network_id: network.id }, paranoid: false }) .then(accounts_network => { if(accounts_network && accounts_network.deleted_at !== null) { return db.accounts_networks.restore({ where: { id: accounts_network.id} }); } else { return accounts_network; } }) }) return Promise.all(promises); }) .then(() => { const promises2 = options.networks.map(network => { return db.accounts_networks.findOrCreate({ where: { account_id: options.accounts.id, network_id: network.id } }) .spread((accounts_network, created) => { return accounts_network.updateAttributes({ external: false, deleted: false }); }); }); return Promise.all(promises2); }) .then(accounts_networks => { options.accounts_networks = accounts_networks; return Promise.resolve(options); }); };