const { APP_URL } = require("../config/appConfig"); const { getRealEstateTypeEnum } = require("./enums"); const { getRegionName, getMunicipalityName } = require("./codes"); const { allRERequestByUiid } = require("./db/dbHelper"); var AWS = require("aws-sdk"); const TEMPLATE_NAME = "MarketAlertTemplate"; 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", Data: getGreetingsEmailHTML(request) }, Text: { Charset: "UTF-8", Data: getGreetingsEmaiTextVersion(request) } }, Subject: { Charset: "UTF-8", Data: `Javimi Potvrda: ${getSubject( request.realEstateType, request.region, request.municipality )}` } }, Source: process.env.SOURCE_EMAIL /* required */, ReplyToAddresses: [process.env.SOURCE_EMAIL] }; const sendEmailPromise = new AWS.SES({ apiVersion: "2010-12-01" }) .sendEmail(params) .promise(); await sendEmailPromise; }; const getGreetingsEmailHTML = realestateRequest => { const realEstateType = getRealEstateTypeEnum( realestateRequest.realEstateType ); const gardenSize = realEstateType.hasGardenSize ? `
Kvadratura okućnice: Od ${realestateRequest.gardenSizeMin} do ${realestateRequest.gardenSizeMax} m2
` : ``; return `

Zdravo, Naručio/la si da ti javimo ako se nekretnina pojavi u oglasima.

Ovo je tražena nekretnina:

Tip nekretnine: ${realEstateType.title}
Područje: ${getRegionName( realestateRequest.region )}
Mjesto: ${getMunicipalityName( realestateRequest.region, realestateRequest.municipality )}
Kvadratura nekretnine: Od ${realestateRequest.sizeMin} do ${ realestateRequest.sizeMax } m2
${gardenSize}
Cijena: ${realestateRequest.priceMin} do ${ realestateRequest.priceMax } KM
Ako želis prestati dobijati obavještenja za ovu pretragu klikni ${APP_URL}/odjava/${ realestateRequest.uniqueId }
Ako želiš promijeniti uslove pretrage klikni ${APP_URL}/pregled/${ realestateRequest.uniqueId }

Tvoj, Javimi tim.

`; }; const getGreetingsEmaiTextVersion = realestateRequest => { const realEstateType = getRealEstateTypeEnum( realestateRequest.realEstateType ); const gardenSize = realEstateType.hasGardenSize ? `Kvadratura okućnice od ${realestateRequest.gardenSizeMin} do ${realestateRequest.gardenSizeMax}` : ""; 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 } ${gardenSize} \n Cijena od ${realestateRequest.priceMin} do ${ realestateRequest.priceMax } \n Ako želis prestati dobijati obavještenja za ovu pretragu klikni ${APP_URL}/odjava/${ realestateRequest.uniqueId }\n Ako želiš promijeniti uslove pretrage klikni ${APP_URL}/odpregled/${realestateRequest.uniqueId}\n Tvoj,\n Javimi tim`; return text; }; const sendBulkEmail = async marketAlerts => { try { destinations = []; groupedRERequests = []; const RERequestUuidsMaped = marketAlerts.map( marketAlert => marketAlert.request ); const RERequestUuidsArray = Array.from(new Set(RERequestUuidsMaped)); const RERequestUuids = RERequestUuidsArray.map(marketAlert => { return { uniqueId: marketAlert }; }); const RERequests = await allRERequestByUiid(RERequestUuids); const requestDataValues = []; RERequests.forEach(RERequest => { var formatedRequest = {}; formatedRequest[RERequest.uniqueId] = requestDataValues[ RERequest.uniqueId ] = { realEstateType: RERequest.realEstateType, region: RERequest.region, municipality: RERequest.municipality, requestUrl: `${APP_URL}/nekretnine/${RERequest.uniqueId}` }; }); marketAlerts.forEach(marketAlert => { const requestObject = { email: marketAlert.email, realEstateType: requestDataValues[marketAlert.request].realEstateType, municipality: requestDataValues[marketAlert.request].municipality, region: requestDataValues[marketAlert.request].region, requestUrl: requestDataValues[marketAlert.request].requestUrl }; if (!groupedRERequests[marketAlert.request]) { groupedRERequests[marketAlert.request] = { requestObject: requestObject, marketAlertArray: [] }; } groupedRERequests[marketAlert.request].marketAlertArray.push({ url: marketAlert.url, title: marketAlert.title, id: marketAlert.id }); }); for (request in groupedRERequests) { const marketAlert = groupedRERequests[request]; let extractedData = toAWSArray(marketAlert.marketAlertArray); const realEstateType = getRealEstateTypeEnum( marketAlert.requestObject.realEstateType ).title; const region = getRegionName(marketAlert.requestObject.region); const municipality = getMunicipalityName( marketAlert.requestObject.region, marketAlert.requestObject.municipality ); const requestUrl = marketAlert.requestObject.requestUrl; let repData = `{ "marketAlertUrl":[${extractedData}], "realestateType":"${realEstateType}", "region":"${region}", "municipality":"${municipality}", "requestUrl":"${requestUrl}" }`; destinations.push({ Destination: { ToAddresses: [marketAlert.requestObject.email] }, ReplacementTemplateData: repData }); } var params = { Destinations: destinations, 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 const sendPromise = new AWS.SES({ apiVersion: "2010-12-01" }) .sendBulkTemplatedEmail(params) .promise(); const awsResult = await sendPromise; } catch (e) { console.log("Could not send bulk email", e); } }; const redirectUrl = marketAlertId => `${APP_URL}/redirect/${marketAlertId}`; const toAWSArray = urlArray => { let arrayString = ""; urlArray.forEach(element => { const formatetdTitle = element.title.replace(/"/g, ""); arrayString = arrayString + `{"url":"${redirectUrl(element.id)}" , "title":"${formatetdTitle}"},`; }); return arrayString.slice(0, -1); }; const getNotificationEmailHtml = () => { return `

Zdravo, Pronašli smo nekretninu koju ste tražili.

Ovo su tražene nekretnine:

{{#each marketAlertUrl}}
  • {{title}}

  • {{/each}}
    Kompletan spisak nekretnina možete pegledati ovdije: Nekretnine
    `; }; const getNotificationEmailText = () => { return ` Zdravo, Pronašli smo nekretninu koju ste tražili. Ovo su tražene nekretnine: {{#each marketAlertUrl}} {{url}} {{title}} {{/each}} , Kompletan spisan nekretnina mozete pegledati ovdije: {{requestUrl}}`; }; const createMarketAlertEmailTemplate = async () => { const marketAlertTemplate = { Template: { TemplateName: TEMPLATE_NAME, SubjectPart: "Javi mi obavijest: {{realestateType}}, {{region}}, {{municipality}}", TextPart: getNotificationEmailText(), HtmlPart: getNotificationEmailHtml() } }; try { const templatePromise = new AWS.SES({ apiVersion: "2010-12-01" }) .updateTemplate(marketAlertTemplate) .promise(); await templatePromise; } catch (e) { console.log("Could not create MarketAlertEmailTemplate", e); } }; const getSubject = (realEstateType, region, municipality) => { return `${getRealEstateTypeEnum(realEstateType).title} ${getRegionName( region )}, ${getMunicipalityName(region, municipality)}`; }; module.exports = { sendTemplatedEmail, sendBulkEmail, createMarketAlertEmailTemplate };