Skip to content

Instantly share code, notes, and snippets.

@hc3
Created August 8, 2018 23:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save hc3/7bddb6936ebde78a1819ef7636c5a013 to your computer and use it in GitHub Desktop.
Save hc3/7bddb6936ebde78a1819ef7636c5a013 to your computer and use it in GitHub Desktop.
import nodemailer from 'nodemailer';
const transporter = nodemailer.createTransport({
host: 'smtp.gmail.com',
port: 465,
secure: true, // use SSL
auth: {
user: "mailer@gmail.com",
pass: "senha"
}
});
function createEmailBody(idUser) {
let path = `https://promorverse-api.herokuapp.com/active-user/${idUser}`;
let body = "<p> deseja ativar sua conta?"
body = body+`<a href='${path}'>`;
body = body+"Ativar Conta</a>";
return body;
}
function createNewAccount(object) {
let account = {};
account.password = object.password;
account.role = object.role;
account.username = object.username;
account.email = object.email;
return account;
};
function updateAccount(object) {
let account = {};
account._id = object._id;
account.role = object.role;
account.email = object.email;
return account;
};
function setDetalhes(object) {
return {
birthDate: object.birthDate,
sex: object.sex,
eyeColor: object.eyeColor,
height: object.height,
weight: object.weight,
skinColor: object.skinColor,
}
}
function setAddress(object) {
return {
cep: object.cep,
publicPlace: object.publicPlace,
complement: object.complement,
neighborhood: object.neighborhood,
city: object.city,
state: object.state,
number: object.number,
}
}
function createNewUser(object) {
let user = {};
if (object.role === 'type1') {
user.detalhes = {};
user.address = {};
user.jobs = [];
if (object.jobs) {
user.jobs = object.jobs.filter(el => !el.removed);
};
user.name = object.name;
user.cpf = object.cpf;
user.detalhes = setDetalhes(object);
user.address = setAddress(object);
}
if (object.role === 'type2') {
user.address = {};
user.socialName = object.socialName;
user.fantasyName = object.fantasyName;
user.cnpj = object.cnpj;
user.address = setAddress(object);
}
if (object.role === 'admin') {
user.name = object.name;
user.age = object.age;
}
return user;
};
function updateUser(object) {
let user = {};
if (object.role === 'type1') {
user.detalhes = {};
user.address = {};
user.socialName = object._company.socialName;
user.fantasyName = object._company.fantasyName;
user.cnpj = object._company.cnpj;
user._id = object._company._id;
user.address = setAddress(object._company.address);
};
if (object.role === 'type2') {
user.detalhes = {};
user.address = {};
user.jobs = [];
if (object._customer.jobs) {
user.jobs = object._customer.jobs
}
user.name = object._customer.name;
user.cpf = object._customer.cpf;
user._id = object._customer._id;
user.detalhes = setDetalhes(object._customer.detalhes);
user.address = setAddress(object._customer.address);
};
return user;
};
function executeRollBack(entity, id, error) {
entity.remove({ _id: id })
.then(error)
.catch(error)
};
function executeFindAndUpdate(firstModel, secondModel, account, user, type, sucess, error) {
firstModel.findOneAndUpdate({ _id: user._id }, user)
.then(inseredUser => {
account[type] = inseredUser._id;
secondModel.findOneAndUpdate({ _id: account._id }, account)
.then(sucess)
.catch(error)
})
.catch(error)
.done()
};
function executeCreate(firstModel, secondModel, account, user, type, success, error) {
firstModel.create(user)
.then(inseredUser => {
account[type] = inseredUser._id;
secondModel.create(account)
.then(inseredAccount => {
const mailOptions = {
from: 'mailer@gmail.com',
to: account.email,
subject: 'Texto assunto',
text: 'Texto',
html:createEmailBody(inseredAccount._id)
};
transporter.sendMail(mailOptions, function (error, info) {
if (error) {
console.log('deu erro:',error);
} else {
console.log('Email enviado: ' + info.response);
}
});
})
.then(() => {
if(inseredUser._id) {
success(inseredUser);
}
})
.catch(err => {
if (err) {
executeRollBack(firstModel, inseredUser._id, error(err));
}
})
})
}
const factory = {
createNewAccount,
createNewUser,
updateAccount,
updateUser,
executeFindAndUpdate,
executeCreate
}
export default factory;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment