const { APP_URL } = require("../config/appConfig"); const { getRealEstateTypeEnum } = require("./enums"); const { getRegionName, getMunicipalityName } = require("./codes"); const { allRERequestByUiid } = require("./db/dbHelper"); let 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: getGreetingsEmailTextVersion(request) } }, Subject: { Charset: "UTF-8", Data: `Javimi Potvrda: ${getSubject(request.realEstateType)}` } }, 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}
Lokacija:
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.id}
Ako želiš promijeniti uslove pretrage klikni ${APP_URL}/pregled/${realEstateRequest.id}

Tvoj, Javimi tim.

`; }; const getGreetingsEmailTextVersion = realEstateRequest => { const realEstateType = getRealEstateTypeEnum( realEstateRequest.realEstateType ); const gardenSize = realEstateType.hasGardenSize ? `Kvadratura okućnice od ${realEstateRequest.gardenSizeMin} do ${realEstateRequest.gardenSizeMax}` : ""; return `Zdravo\nNaručio/la si da ti javimo ako se nekretnina pojavi u oglasima\n Ovo je tražena nekretnina:\nTip nekretnine: ${realEstateRequest.realEstateType}\n Lokacija nekretnine :\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.id}\n Ako želiš promijeniti uslove pretrage klikni ${APP_URL}/odpregled/${realEstateRequest.id}\n Tvoj,\n Javimi tim`; }; 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 { id: marketAlert }; }); const RERequests = await allRERequestByUiid(RERequestUuids); const requestDataValues = []; RERequests.forEach(RERequest => { var formatedRequest = {}; formatedRequest[RERequest.id] = requestDataValues[RERequest.id] = { realEstateType: RERequest.realEstateType, region: RERequest.region, municipality: RERequest.municipality, requestUrl: `${APP_URL}/nekretnine/${RERequest.id}` }; }); 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: [] }; } if (groupedRERequests[marketAlert.request].marketAlertArray.length < 10) { 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}}", 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 => { return getRealEstateTypeEnum(realEstateType).title; }; module.exports = { sendTemplatedEmail, sendBulkEmail, createMarketAlertEmailTemplate };