2019-06-03 10:34:59 +02:00
2019-06-27 17:29:57 +02:00
const dotenv = require ( 'dotenv' ) . config ( ) ;
2019-06-11 10:26:48 +02:00
const { getRealEstateTypeEnum } = require ( './enums' ) ;
const { getRegionName , getMunicipalityName } = require ( './codes' ) ;
2019-06-27 17:29:57 +02:00
var AWS = require ( 'aws-sdk' ) ;
const TEMPLATE _NAME = "MarketAlertTemplate"
2019-06-03 10:34:59 +02:00
AWS . config . update ( {
region : process . env . AMAZON _REGION ,
credentials :
{
accessKeyId : process . env . AMAZON _ACCES _KEY _ID ,
secretAccessKey : process . env . AMAZON _SECRET _ACCESS _KEY
}
} ) ;
const sendTemplatedEmail = async ( email , request ) => {
const params = {
Destination : { /* required */
CcAddresses : [
] ,
ToAddresses : [
email
]
} ,
Message : { /* required */
Body : { /* required */
Html : {
Charset : "UTF-8" ,
2019-06-28 18:06:19 +02:00
Data : getGreetingsEmailHTML ( request )
2019-06-03 10:34:59 +02:00
} ,
Text : {
Charset : "UTF-8" ,
2019-06-28 18:06:19 +02:00
Data : getGreetingsEmaiTextVersion ( request )
2019-06-03 10:34:59 +02:00
}
} ,
Subject : {
Charset : 'UTF-8' ,
Data : ` Javimi Potvrda: ${ request . realEstateType } ${ getRegionName ( request . region ) } , ${ getMunicipalityName ( request . region , request . municipality ) } `
}
} ,
2019-06-11 10:26:48 +02:00
Source : process . env . SOURCE _EMAIL , /* required */
2019-06-03 10:34:59 +02:00
ReplyToAddresses : [
2019-06-11 10:26:48 +02:00
process . env . SOURCE _EMAIL ,
2019-06-03 10:34:59 +02:00
] ,
} ;
const sendEmailPromise = new AWS . SES ( { apiVersion : '2010-12-01' } ) . sendEmail ( params ) . promise ( ) ;
await sendEmailPromise ;
}
2019-06-28 18:06:19 +02:00
const getGreetingsEmailHTML = ( realestateRequest ) => {
2019-06-11 10:26:48 +02:00
const realEstateType = getRealEstateTypeEnum ( realestateRequest . realEstateType ) ;
const gardenSize = realEstateType . hasGardenSize ? ` <div><strong>Kvadratura okućnice: Od ${ realestateRequest . gardenSizeMin } do ${ realestateRequest . gardenSizeMax } m2 </strong></div> ` : ` `
2019-06-03 10:34:59 +02:00
return ` <h1> Zdravo,
Naručio / la si da ti javimo ako se nekretnina pojavi u oglasima . < / h 1 >
< h2 > Ovo je tražena nekretnina : < / h 2 >
< div >
2019-06-11 10:26:48 +02:00
< div > < strong > Tip nekretnine : $ { realEstateType . title } < / s t r o n g > < / d i v >
< div > < strong > Područje : $ { getRegionName ( realestateRequest . region ) } < / s t r o n g > < / d i v >
< div > < strong > Mjesto : $ { getMunicipalityName ( realestateRequest . region , realestateRequest . municipality ) } < / s t r o n g > < / d i v >
< div > < strong > Kvadratura nekretnine : Od $ { realestateRequest . sizeMin } do $ { realestateRequest . sizeMax } m2 < / s t r o n g > < / d i v >
$ { gardenSize }
< div > < strong > Cijena : $ { realestateRequest . priceMin } do $ { realestateRequest . priceMax } KM < / s t r o n g > < / d i v >
< / d i v >
< div >
2019-06-03 10:34:59 +02:00
< / d i v >
< div > < strong > Ako želis prestati dobijati obavještenja za ovu pretragu klikni $ { process . env . APP _URL } / odjava / $ { realestateRequest . uniqueId } < / s t r o n g > < / d i v >
< div > < strong > Ako želiš promijeniti uslove pretrage klikni $ { process . env . APP _URL } / pregled / $ { realestateRequest . uniqueId } < / s t r o n g > < / d i v >
< h4 > Tvoj ,
Javimi tim .
< / h 4 > `
}
2019-06-28 18:06:19 +02:00
const getGreetingsEmaiTextVersion = ( realestateRequest ) => {
2019-06-11 10:26:48 +02:00
const realEstateType = getRealEstateTypeEnum ( realestateRequest . realEstateType ) ;
2019-06-27 17:29:57 +02:00
const gardenSize = realEstateType . hasGardenSize ? "Kvadratura okućnice od " + realestateRequest . gardenSizeMin + " do " + realestateRequest . gardenSizeMax : ""
2019-06-11 10:26:48 +02:00
2019-06-03 10:34:59 +02:00
const text = "Zdravo, \n Naručio/la si da ti javimo ako se nekretnina pojavi u oglasima \n Ovo je tražena nekretnina: \n , Tip nekretnine: "
+ realestateRequest . realEstateType + "\n Područje" + getRegionName ( realestateRequest . region ) + "\n Mjesto " + getMunicipalityName ( realestateRequest . region , realestateRequest . municipality )
+ "\n Kvadratura nekretnine Od " + realestateRequest . sizeMin + " do " + realestateRequest . sizeMaX +
2019-06-11 10:26:48 +02:00
+ gardenSize
2019-06-27 17:29:57 +02:00
"\n Cijena od " + realestateRequest . priceMin + " do " + realestateRequest . priceMax +
2019-06-03 10:34:59 +02:00
"\n Ako želis prestati dobijati obavještenja za ovu pretragu klikni" + process . env . APP _URL + "/odjava/" + realestateRequest . uniqueId +
"\n Ako želiš promijeniti uslove pretrage klikni " + process . env . APP _URL + "/odpregled/" + realestateRequest . uniqueId +
"\n Tvoj,\n Javimi tim"
return text ;
}
2019-06-27 17:29:57 +02:00
const sendBulkEmail = async ( marketAlerts ) => {
try {
destinations = [ ]
2019-06-28 18:06:19 +02:00
groupedEmails = [ ] ;
2019-06-27 17:29:57 +02:00
marketAlerts . forEach ( marketAlert => {
2019-06-28 18:06:19 +02:00
if ( ! groupedEmails [ marketAlert . email ] ) {
groupedEmails [ marketAlert . email ] = [ ] ;
groupedEmails [ marketAlert . email ] . push ( { url : marketAlert . url , title : marketAlert . title } ) ;
} else {
groupedEmails [ marketAlert . email ] . push ( { url : marketAlert . url , title : marketAlert . title } ) ;
}
} ) ;
for ( email in groupedEmails ) {
const url = groupedEmails [ email ] ;
let repData = ` { "marketAlertUrl":[ ${ toAWSArray ( url ) } ], "favoriteanimal":"yak" } `
2019-06-27 17:29:57 +02:00
destinations . push ( {
Destination : {
ToAddresses : [
2019-06-28 18:06:19 +02:00
email
2019-06-27 17:29:57 +02:00
]
} ,
2019-06-28 18:06:19 +02:00
ReplacementTemplateData : repData
2019-06-27 17:29:57 +02:00
} )
2019-06-28 18:06:19 +02:00
}
2019-07-02 11:54:33 +02:00
console . log ( "AWS EMAIL : Bulk email replacement data:" ) ;
2019-06-28 18:06:19 +02:00
console . log ( destinations ) ;
2019-06-27 17:29:57 +02:00
var params = {
2019-06-28 18:06:19 +02:00
Destinations :
destinations ,
2019-06-27 17:29:57 +02:00
Source : process . env . SOURCE _EMAIL , /* required */
Template : TEMPLATE _NAME , /* required */
DefaultTemplateData : '{ \"REPLACEMENT_TAG_NAME\":\"REPLACEMENT_VALUE\" }' ,
ReplyToAddresses : [
process . env . SOURCE _EMAIL ,
]
} ;
// Create the promise and SES service object
2019-06-28 18:06:19 +02:00
const sendPromise = new AWS . SES ( { apiVersion : '2010-12-01' } ) . sendBulkTemplatedEmail ( params ) . promise ( ) ;
2019-07-02 11:54:33 +02:00
const awsResult = await sendPromise ;
console . log ( "AWS SES bulk email response" ) ;
console . log ( awsResult ) ;
2019-06-27 17:29:57 +02:00
} catch ( e ) {
console . log ( "Could not send bulk email" , e )
}
2019-06-28 18:06:19 +02:00
}
const toAWSArray = ( urlArray ) => {
let arrayString = ""
urlArray . forEach ( element => {
2019-07-02 12:25:22 +02:00
const formatetdTitle = element . title . replace ( /"/g , "" ) ;
arrayString = arrayString + ` {"url":" ${ element . url . trim ( ) } " , "title":" ${ formatetdTitle } "}, `
2019-06-28 18:06:19 +02:00
} ) ;
2019-07-02 11:54:33 +02:00
return arrayString . slice ( 0 , - 1 ) ;
2019-06-28 18:06:19 +02:00
}
const getNotificationEmailHtml = ( ) => {
return ` <h2> Zdravo,
Pronašli smo nekretninu koju ste tražili . < / h 2 >
< h3 > Ovo su tražene nekretnine : < / h 3 >
< div >
< div > { { # each marketAlertUrl } } < li > < a href = "{{url}}" > { { title } } < / a > < / l i > < b r / > { { / e a c h } } < d i v / >
< div / >
< / d i v > `
}
const getNotificationEmailText = ( ) => {
return ` Zdravo,
Pronašli smo nekretninu koju ste tražili . Ovo su tražene nekretnine : { { # each marketAlertUrl } } { { url } } { { title } } { { / e a c h } } `
2019-06-27 17:29:57 +02:00
}
const createMarketAlertEmailTemplate = async ( ) => {
const marketAlertTemplate = {
Template : {
TemplateName : "MarketAlertTemplate" ,
2019-06-28 18:06:19 +02:00
SubjectPart : "Javi mi obavijest" ,
2019-07-02 11:54:33 +02:00
TextPart : getNotificationEmailText ( ) ,
2019-06-28 18:06:19 +02:00
HtmlPart : getNotificationEmailHtml ( )
2019-06-27 17:29:57 +02:00
}
}
try {
2019-06-28 18:06:19 +02:00
const templatePromise = new AWS . SES ( { apiVersion : '2010-12-01' } ) . updateTemplate ( marketAlertTemplate ) . promise ( ) ;
2019-06-27 17:29:57 +02:00
await templatePromise
} catch ( e ) {
console . log ( "Could not create MarketAlertEmailTemplate" , e ) ;
}
}
2019-06-03 10:34:59 +02:00
module . exports = {
2019-06-27 17:29:57 +02:00
sendTemplatedEmail ,
sendBulkEmail ,
createMarketAlertEmailTemplate
2019-06-03 10:34:59 +02:00
} ;