const chalk = require('chalk') var Subscriber = require('./models/subscriber'); var register_subscriber = function(data) { return new Promise((resolve, reject) => { if(data.email == '' || data.email == undefined || !validateEmail(data.email)) { console.log(`${chalk.red(`Error: Received data does not contain a valid email address`)}`); console.log(data); resolve(undefined); } Subscriber.findOne({email: data.email}).then((subscriber) => { if(subscriber != undefined) { subscriber.attempted_registration(); subscriber.save().then((subscriber) => { console.log(`Subscriber already in list ${chalk.italic(`\'${subscriber.email}\'`)}`, ); var payload = response_payload(subscriber, true); resolve(payload); }).catch((error) => { reject(error); }); } else { var new_subscriber = new Subscriber(data); new_subscriber.save().then((subscriber) => { console.log(`Registered new subscriber ${chalk.italic(`\'${subscriber.email}\'`)}`); var payload = response_payload(subscriber, false); resolve(payload); }).catch((error) => { reject(error); }); } }).catch((error) => { reject(error); }); }); } var response_payload = function(subscriber, registered) { var payload = {}; if(subscriber != undefined) { payload.email = subscriber.email; payload.first_name = subscriber.first_name; payload.last_name = subscriber.last_name; payload.registration_attempts = subscriber.registration_attempts; payload.registration_date = subscriber.registration_date; payload.last_updated = subscriber.last_updated; payload.confirmed_subscription = subscriber.confirmed_subscription; } else payload.confirmed_subscription = false; payload.already_registered = registered; return payload; } var validateEmail = function(email) { const re = /^(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i; return re.test(String(email).toLowerCase()); } module.exports = register_subscriber;