@speakr/speakr-module-services
Version:
SPEAKR Shared Service Module
213 lines (191 loc) • 11.9 kB
JavaScript
'use strict';
const db = {};
const env = require('../env');
const Sequelize = require('sequelize');
const modelsRoute = '../models/';
let sequelize;
sequelize = new Sequelize(env.DATABASE_NAME, env.DATABASE_USERNAME, env.DATABASE_PASSWORD, {
host: env.DATABASE_HOST,
port: env.DATABASE_PORT,
dialect: env.DATABASE_DIALECT,
dialectOptions: __dirname + `../config/speakr-internal-devs.pem`,
define: {
underscored: true
}
});
db.sequelize = sequelize;
db.Sequelize = Sequelize;
// MODELS INDEX
db.users = require(modelsRoute + 'users.js')(sequelize, Sequelize);
db.roles = require(modelsRoute + 'roles.js')(sequelize, Sequelize);
db.users_roles = require(modelsRoute + 'users_roles.js')(sequelize, Sequelize);
db.answers = require(modelsRoute + 'answers.js')(sequelize, Sequelize);
db.tones = require(modelsRoute + 'tones.js')(sequelize, Sequelize);
db.brands = require(modelsRoute + 'brands.js')(sequelize, Sequelize);
db.groups = require(modelsRoute + 'groups.js')(sequelize, Sequelize);
db.tokens = require(modelsRoute + 'tokens.js')(sequelize, Sequelize);
db.devices = require(modelsRoute + 'devices.js')(sequelize, Sequelize);
db.invites = require(modelsRoute + 'invites.js')(sequelize, Sequelize);
db.metrics = require(modelsRoute + 'metrics.js')(sequelize, Sequelize);
db.optouts = require(modelsRoute + 'optouts.js')(sequelize, Sequelize);
db.networks = require(modelsRoute + 'networks.js')(sequelize, Sequelize);
db.agencies = require(modelsRoute + 'agencies.js')(sequelize, Sequelize);
db.mandrill = require(modelsRoute + 'mandrill.js')(sequelize, Sequelize);
db.statuses = require(modelsRoute + 'statuses.js')(sequelize, Sequelize);
db.contacts = require(modelsRoute + 'contacts.js')(sequelize, Sequelize);
db.platforms = require(modelsRoute + 'platforms.js')(sequelize, Sequelize);
db.ethnicities = require(modelsRoute + 'ethnicities.js')(sequelize, Sequelize);
db.initiatives = require(modelsRoute + 'initiatives.js')(sequelize, Sequelize);
db.influencers = require(modelsRoute + 'influencers.js')(sequelize, Sequelize);
db.influencers_networks = require(modelsRoute + 'influencers_networks.js')(sequelize, Sequelize);
db.influencers_sessions = require(modelsRoute + 'influencers_sessions.js')(sequelize, Sequelize);
db.notifications = require(modelsRoute + 'notifications.js')(sequelize, Sequelize);
db.creatives = require(modelsRoute + 'creatives.js')(sequelize, Sequelize);
db.scheduled_creatives = require(modelsRoute + 'scheduled_creatives.js')(sequelize, Sequelize);
db.creatives_statuses = require(modelsRoute + 'creatives_statuses.js')(sequelize, Sequelize);
db.creatives_status_types = require(modelsRoute + 'creatives_status_types.js')(sequelize, Sequelize);
db.creatives_notes = require(modelsRoute + 'creatives_notes.js')(sequelize, Sequelize);
db.products = require(modelsRoute + 'products.js')(sequelize, Sequelize);
db.profanities = require(modelsRoute + 'profanities.js')(sequelize, Sequelize);
db.payments = require(modelsRoute + 'payments.js')(sequelize, Sequelize);
db.invoices = require(modelsRoute + 'invoices.js')(sequelize, Sequelize);
db.line_items = require(modelsRoute + 'line_items.js')(sequelize, Sequelize);
db.influencer_profiles = require(modelsRoute + 'influencer_profiles.js')(sequelize, Sequelize);
db.accounts = require(modelsRoute + 'accounts.js')(sequelize, Sequelize);
db.accounts_categories = require(modelsRoute + 'accounts_categories.js')(sequelize, Sequelize);
db.accounts_networks = require(modelsRoute + 'accounts_networks.js')(sequelize, Sequelize);
db.accounts_stats = require(modelsRoute + 'accounts_stats.js')(sequelize, Sequelize);
db.accounts_carts = require(modelsRoute + 'accounts_carts.js')(sequelize, Sequelize);
db.accounts_historics = require(modelsRoute + 'accounts_historics.js')(sequelize, Sequelize);
db.account_imports = require(modelsRoute + 'account_imports.js')(sequelize, Sequelize);
db.accounts_offer_prices = require(modelsRoute + 'accounts_offer_prices.js')(sequelize, Sequelize);
db.reports = require(modelsRoute + 'reports.js')(sequelize, Sequelize);
db.reports_callouts = require(modelsRoute + 'reports_callouts.js')(sequelize, Sequelize);
db.reports_creatives = require(modelsRoute + 'reports_creatives.js')(sequelize, Sequelize);
db.reports_periscopes = require(modelsRoute + 'reports_periscopes.js')(sequelize, Sequelize);
db.reports_impressions = require(modelsRoute + 'reports_impressions.js')(sequelize, Sequelize);
db.reports_engagements = require(modelsRoute + 'reports_engagements.js')(sequelize, Sequelize);
db.campaign_reports_custom = require(modelsRoute + 'campaign_reports_custom.js')(sequelize, Sequelize);
db.campaigns = require(modelsRoute + 'campaigns.js')(sequelize, Sequelize);
db.campaign_profiles = require(modelsRoute + 'campaign_profiles.js')(sequelize, Sequelize);
db.approval_requirements = require(modelsRoute + 'approval_requirements.js')(sequelize, Sequelize);
db.content_categories = require(modelsRoute + 'content_categories.js')(sequelize, Sequelize);
db.content_tones = require(modelsRoute + 'content_tones.js')(sequelize, Sequelize);
db.paypal_ipn = require(modelsRoute + 'paypal_ipn.js')(sequelize, Sequelize);
db.tracking_stats = require(modelsRoute + 'tracking_stats.js')(sequelize, Sequelize);
db.point_of_contacts = require(modelsRoute + 'point_of_contacts.js')(sequelize, Sequelize);
// RELATIONSHIPS INDEX
db.users.hasMany(db.roles);
db.users.belongsTo(db.networks);
// HAS ONE
db.accounts.hasOne(db.metrics);
//db.accounts.hasOne(db.accounts_networks);
db.accounts.hasOne(db.accounts_stats);
db.creatives_status_types.hasOne(db.creatives_statuses, {foreignKey: 'creatives_status_types_id'});
// BELONGS TO
db.accounts.belongsTo(db.platforms);
db.accounts.belongsTo(db.accounts, {foreignKey: 'parent_id'});
db.accounts.belongsTo(db.influencers);
db.accounts.belongsTo(db.accounts_categories, {foreignKey: 'account_category_id'});
db.accounts_networks.belongsTo(db.networks);
db.accounts_networks.belongsTo(db.accounts);
db.accounts_stats.belongsTo(db.accounts);
db.accounts_historics.belongsTo(db.accounts);
db.answers.belongsTo(db.influencers);
db.accounts_carts.belongsTo(db.accounts);
db.accounts_carts.belongsTo(db.groups);
db.agencies.belongsTo(db.networks);
db.brands.belongsTo(db.networks);
db.campaigns.belongsTo(db.agencies);
db.campaigns.belongsTo(db.networks);
db.campaign_reports_custom.belongsTo(db.campaigns);
db.groups.belongsTo(db.networks);
db.campaigns.belongsTo(db.brands, {foreignKey: 'brandname_id'});
db.campaign_profiles.belongsTo(db.campaigns);
db.creatives.belongsTo(db.initiatives);
db.creatives.belongsTo(db.invites, {foreignKey: 'initiatives_accounts_invites_id'});
db.creatives.belongsTo(db.accounts);
db.creatives.belongsTo(db.platforms);
db.creatives_notes.belongsTo(db.creatives);
db.creatives_statuses.belongsTo(db.creatives);
db.creatives_statuses.belongsTo(db.creatives_status_types, {foreignKey: 'creatives_status_types_id'});
db.creatives_status_types.belongsTo(db.platforms);
db.contacts.belongsTo(db.campaigns);
db.point_of_contacts.belongsTo(db.campaigns);
db.invites.belongsTo(db.initiatives);
db.initiatives.belongsTo(db.platforms);
db.initiatives.belongsTo(db.campaigns);
db.initiatives.belongsTo(db.networks);
db.initiatives.belongsTo(db.statuses, {foreignKey: 'initiative_status_id'});
db.invites.belongsTo(db.accounts);
db.invites.hasMany(db.creatives, {foreignKey: 'initiatives_accounts_invites_id'});
db.invoices.belongsTo(db.influencers);
db.invoices.belongsTo(db.networks, {foreignKey: 'network_id'});
db.metrics.belongsTo(db.accounts);
db.notifications.belongsTo(db.invites, {foreignKey: 'invite_id'});
db.notifications.belongsTo(db.payments);
db.notifications.belongsTo(db.line_items);
db.notifications.belongsTo(db.influencers);
db.notifications.belongsTo(db.creatives);
db.optouts.belongsTo(db.campaigns);
db.optouts.belongsTo(db.groups);
db.reports_impressions.belongsTo(db.reports);
db.reports_engagements.belongsTo(db.reports);
db.payments.belongsTo(db.invoices);
db.payments.belongsTo(db.creatives, {
foreignKey: 'payable_id',
scope: {
type: 'creative'
}});
db.payments.belongsTo(db.campaigns, {foreignKey: 'payable_id', scope: {
type: 'campaign cost'
}});
db.payments.belongsTo(db.influencers, {foreignKey: 'payable_id', scope: {
type: 'referral'
}});
db.line_items.belongsTo(db.networks);
db.line_items.belongsTo(db.invoices);
db.line_items.belongsTo(db.campaigns, {foreignKey: 'payable_id', scope: {
type: 'campaign cost'
}});
db.line_items.belongsTo(db.influencers, {foreignKey: 'payable_id', scope: {
type: 'referral'
}});
db.influencer_profiles.belongsTo(db.influencers);
// HAS MANY
db.accounts.hasMany(db.invites);
db.accounts.hasMany(db.accounts_networks);
db.agencies.hasMany(db.campaigns);
db.campaigns.hasMany(db.contacts);
db.campaigns.hasMany(db.point_of_contacts);
db.campaigns.hasMany(db.initiatives);
db.campaigns.hasMany(db.optouts);
db.campaigns.hasMany(db.campaign_profiles);
db.campaigns.hasMany(db.campaign_reports_custom);
db.creatives.hasMany(db.creatives_statuses);
db.creatives.hasMany(db.creatives_notes);
db.groups.hasMany(db.optouts);
db.influencers.hasMany(db.accounts);
db.influencers.hasMany(db.invoices);
db.influencers_networks.belongsTo(db.influencers);
db.influencers_networks.belongsTo(db.networks);
db.influencers_sessions.belongsTo(db.influencers);
db.influencers_sessions.belongsTo(db.accounts);
db.initiatives.hasMany(db.invites);
db.invoices.hasMany(db.payments);
db.invoices.hasMany(db.line_items);
db.networks.hasMany(db.accounts_networks);
db.networks.hasMany(db.agencies);
db.networks.hasMany(db.brands);
db.networks.hasMany(db.groups);
db.networks.hasMany(db.campaigns);
db.networks.hasMany(db.influencers_networks);
db.platforms.hasMany(db.accounts);
db.reports.hasMany(db.reports_impressions);
db.reports.hasMany(db.reports_engagements);
// BELONGS TO MANY
db.accounts.belongsToMany(db.networks, {through: 'accounts_networks'});
db.accounts.belongsToMany(db.groups, {through: 'accounts_carts'});
//db.creatives.belongsToMany(db.creatives_status_types, {through: 'creatives_statuses'});
db.groups.belongsToMany(db.accounts, {through: 'accounts_carts', foreignKey: 'cart_id'});
module.exports = db;