@speakr/speakr-module-services
Version:
SPEAKR Shared Service Module
110 lines (106 loc) • 3 kB
JavaScript
;
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);
});
};