diff --git a/app/helpers/emailContentGenerator.js b/app/helpers/emailContentGenerator.js new file mode 100644 index 0000000..9ac7bb2 --- /dev/null +++ b/app/helpers/emailContentGenerator.js @@ -0,0 +1,79 @@ +"use strict"; + +const { MAX_REAL_ESTATES_IN_EMAIL, APP_URL } = require("../config/appConfig"); +const { AD_CATEGORY } = require("../common/enums"); + +const generateEmailFooter = searchRequestId => { + return `
Ako želite prestati dobijati obavještenja za ovu pretragu, odjavite ovdje
+
Ako želite pogledati ili promijeniti uslove za ovu pretragu, pogledajte ovdje
+
+

Vaš,
Javimi tim

`; +}; + +const generateNotificationEmail = (realEstates, searchRequestId) => { + const truncateList = realEstates.length > MAX_REAL_ESTATES_IN_EMAIL; + const realEstatesToShow = truncateList + ? realEstates.slice(0, MAX_REAL_ESTATES_IN_EMAIL) + : realEstates; + + const allRealEstatesLink = `${APP_URL}/nekretnine/${searchRequestId}`; + + let realEstateLinks = ""; + for (const realEstate of realEstatesToShow) { + const { id: realEstateId, title } = realEstate; + + realEstateLinks += `
  • ${title}

  • `; + } + + const moreRealEstates = truncateList + ? `
    Kompletan spisak nekretnina možete pegledati na: Nekretnine
    ` + : ""; + + const emailFooter = generateEmailFooter(searchRequestId); + + return `

    Zdravo, + Ovo su nekretnine koje ste tražili.

    +
    + ${realEstateLinks} +
    + ${moreRealEstates} +
    +
    + ${emailFooter}`; +}; + +const generateNewSearchRequestEmail = searchRequest => { + const realEstateType = AD_CATEGORY[searchRequest.realEstateType]; + const { + id, + gardenSizeMin, + gardenSizeMax, + sizeMin, + sizeMax, + priceMin, + priceMax + } = searchRequest; + + const gardenSize = realEstateType.hasGardenSize + ? `
    Kvadratura okućnice: Od ${gardenSizeMin} do ${gardenSizeMax} m2
    ` + : ``; + + const emailFooter = generateEmailFooter(id); + + return `

    Zdravo
    Naručili ste da Vam javimo ako se nekretnina pojavi u oglasima.

    +

    Ovo su uslovi pretrage :

    +
    +
    Tip nekretnine: ${realEstateType.title}
    +
    Lokacija:
    +
    Kvadratura nekretnine: Od ${sizeMin} do ${sizeMax} m2
    + ${gardenSize} +
    Cijena: ${priceMin} do ${priceMax} KM
    +
    +
    + ${emailFooter}`; +}; + +module.exports = { + generateNotificationEmail, + generateNewSearchRequestEmail +}; diff --git a/package-lock.json b/package-lock.json index ad66538..b18ae09 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2077,6 +2077,29 @@ } } }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + }, + "html-to-text": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/html-to-text/-/html-to-text-5.1.1.tgz", + "integrity": "sha512-Bci6bD/JIfZSvG4s0gW/9mMKwBRoe/1RWLxUME/d6WUSZCdY7T60bssf/jFf7EYXRyqU4P5xdClVqiYU0/ypdA==", + "requires": { + "he": "^1.2.0", + "htmlparser2": "^3.10.1", + "lodash": "^4.17.11", + "minimist": "^1.2.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + } + } + }, "htmlparser2": { "version": "3.10.1", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", diff --git a/package.json b/package.json index 475db8e..fe4691e 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ "express": "^4.16.4", "express-ejs-layouts": "^2.5.0", "express-layout": "^0.1.0", + "html-to-text": "^5.1.1", "moment": "^2.24.0", "moment-timezone": "^0.5.26", "node-fetch": "^2.3.0",