@speakr/speakr-module-services
Version:
SPEAKR Shared Service Module
241 lines (237 loc) • 6.63 kB
JavaScript
'use strict';
let _ = require('underscore');
module.exports = function(sequelize, DataTypes) {
let campaigns = sequelize.define('campaigns', {
id_hash: {
type: DataTypes.STRING,
allowNull: true
},
title: {
type: DataTypes.STRING
},
start_date: {
type: DataTypes.DATE
},
end_date: {
type: DataTypes.DATE
},
description: {
type: DataTypes.STRING,
allowNull: true
},
budget: {
type: DataTypes.INTEGER,
defaultValue: 0,
allowNull: true
},
impressions: {
type: DataTypes.INTEGER,
defaultValue: 0,
allowNull: true
},
cpm: {
type: DataTypes.FLOAT,
defaultValue: 0,
allowNull: true
},
added_value: {
type: DataTypes.FLOAT,
defaultValue: 0,
allowNull: true
},
product_price: {
type: DataTypes.FLOAT,
defaultValue: 0,
allowNull: true
},
total_cost: {
type: DataTypes.FLOAT,
defaultValue: 0,
allowNull: true
},
other_interests: {
type: DataTypes.TEXT,
allowNull: true
},
rating: {
type: DataTypes.ENUM("G", "PG", "R", "PG-13"),
allowNull: true,
field: "rating_enum"
},
categories: {
type: DataTypes.ARRAY(DataTypes.STRING),
validate: {isIn: (values) => {
values.map((value) => {
if (['', 'Animals', 'Art', 'Cars', 'Celebs', 'Dance', 'Family', 'Fashion', 'Fitness', 'Food', 'Friends', 'Games', 'Giveaways', 'Luxury', 'Memes/Quotes', 'Movies', 'Music', 'Nature', 'News/Information/Tips', 'Party/Events', 'Professional Photos', 'Relationships', 'Science', 'Sports', 'Tech', 'Theatre', 'Things/Objects', 'Travel', 'Furniture', 'Himself/Herself', 'Houses', 'Other People', 'Tv', 'Urban/Cities', 'DIY'].indexOf(value) == -1)
throw new Error("Not allowed.");
});
return values;
}},
isArray: true,
allowNull: true,
defaultValue: []
},
tones: {
type: DataTypes.ARRAY(DataTypes.STRING),
validate: {isIn: (values) => {
values.map((value) => {
if (['', 'Adventurous', 'Autobiographical/Lifecasting', 'Clean', 'Comedic', 'Conservative', 'Conversational', 'Edgy', 'Intellectual', 'Playful/Silly', 'Relatable', 'Romantic', 'Sarcastic/Snarky', 'Scary', 'Sexy', 'Artistic/Visually Captivating', 'Inspirational/Motivational'].indexOf(value) == -1)
throw new Error("Not allowed.");
});
return values;
}},
isArray: true, allowNull: true, defaultValue: []
},
ethnicities: {
type: DataTypes.ARRAY(DataTypes.STRING),
validate: {isIn: (values) => {
values.map((value) => {
if (['', 'White/Caucasian', 'Black/African', 'Asian', 'Native American', 'Latino/Hispanic', 'Pacific Islander', 'East Indian', 'Middle Eastern', 'Other'].indexOf(value) == -1)
throw new Error("Not allowed.");
});
return values;
}},
isArray: true, allowNull: true, defaultValue: []
},
age:{
type: DataTypes.RANGE,
allowNull: true
},
gender: {
type: DataTypes.STRING,
allowNull: true
},
countries: {
type: DataTypes.ARRAY(DataTypes.STRING),
isArray: true,
allowNull: true,
defaultValue: []
},
states: {
type: DataTypes.ARRAY(DataTypes.STRING),
isArray: true,
allowNull: true,
defaultValue: []
},
cities: {
type: DataTypes.ARRAY(DataTypes.STRING),
isArray: true,
allowNull: true,
defaultValue: []
},
audience_ethnicities: {
type: DataTypes.ARRAY(DataTypes.STRING),
validate: {isIn: (values) => {
values.map((value) => {
if (['', 'White/Caucasian', 'Black/African', 'Asian', 'Native American', 'Latino/Hispanic', 'Pacific Islander', 'East Indian', 'Middle Eastern', 'Other'].indexOf(value) == -1)
throw new Error("Not allowed.");
});
return values;
}},
isArray: true, allowNull: true, defaultValue: []
},
audience_age: {
type: DataTypes.RANGE,
allowNull: true
},
audience_gender: {
type: DataTypes.STRING,
allowNull: true
},
audience_countries: {
type: DataTypes.ARRAY(DataTypes.STRING),
isArray: true,
allowNull: true,
defaultValue: []
},
audience_states: {
type: DataTypes.ARRAY(DataTypes.STRING),
isArray: true,
allowNull: true,
defaultValue: []
},
audience_cities: {
type: DataTypes.ARRAY(DataTypes.STRING),
isArray: true,
allowNull: true,
defaultValue: []
},
audience_interests: {
type: DataTypes.ARRAY(DataTypes.STRING),
isArray: true,
allowNull: true,
defaultValue: []
},
inventory_types: {
type: DataTypes.ARRAY(DataTypes.STRING),
isArray: true,
allowNull: true,
defaultValue: []
},
simultaneous_campaigns: {
type: DataTypes.ARRAY(DataTypes.STRING),
isArray: true,
allowNull: true,
defaultValue: []
},
keywords_to_avoid: {
type: DataTypes.ARRAY(DataTypes.STRING),
isArray: true,
allowNull: true,
defaultValue: []
},
hashtags: {
type: DataTypes.ARRAY(DataTypes.STRING),
isArray: true,
allowNull: true,
defaultValue: []
},
approval_requirements: {
type: DataTypes.ARRAY(DataTypes.STRING),
validate: {isIn: (values) => {
values.map((value) => {
if (['', 'influencer approval', 'post approval'].indexOf(value) == -1)
throw new Error("Not allowed.");
});
return values;
}},
isArray: true, allowNull: true, defaultValue: []
},
account_categories: {
type: DataTypes.ARRAY(DataTypes.STRING), isArray: true, allowNull: true, defaultValue: [],
validate: {isIn: (values) => {
values.map((value) => {
if (['', 'real', 'parody', 'celeb', 'social celeb', 'specialty'].indexOf(value) == -1)
throw new Error("Not allowed.");
});
return values;
}}
},
estimated_engagements: {
type: DataTypes.INTEGER,
defaultValue: 0,
allowNull: true
},
program_value: {
type: DataTypes.INTEGER,
defaultValue: 0,
allowNull: true
},
report_url: {
type: DataTypes.STRING
},
created_at: {
type: DataTypes.DATE
},
updated_at: {
type: DataTypes.DATE
},
deleted_at: {
type: DataTypes.DATE
}
}, {
paranoid: true,
underscored: true
});
return campaigns;
};