From c64ee429147a7bde62be71580575d7d391c9dca9 Mon Sep 17 00:00:00 2001 From: Bilal Catic Date: Wed, 22 May 2019 11:36:01 +0200 Subject: [PATCH 1/4] Skip and prevent saving garden size if not needed --- app/controllers/gardenSizes.js | 9 ++++++--- app/controllers/queryReview.js | 7 +++++-- app/controllers/realEstateTypes.js | 5 ++++- app/controllers/sizes.js | 7 +++++-- app/helpers/enums.js | 17 +++++++++++++---- 5 files changed, 33 insertions(+), 12 deletions(-) diff --git a/app/controllers/gardenSizes.js b/app/controllers/gardenSizes.js index 772304f..ec16738 100644 --- a/app/controllers/gardenSizes.js +++ b/app/controllers/gardenSizes.js @@ -1,5 +1,5 @@ const { currentRERequest } = require('../helpers/url'); -const { gardenSizes } = require('../helpers/enums'); +const { gardenSizes, getRealEstateTypeEnum } = require('../helpers/enums'); const getGardenSize = (req,res) => { res.render('gardenSize', { gardenSizes }); @@ -11,8 +11,11 @@ const postGardenSize = async (req, res) => { const nextStepPage = req.query.nextStep || 'cijena'; const nextStepUrl = `/${nextStepPage}/${request.uniqueId}`; - request.gardenSize = req.body.gardensize; - await request.save(); + const realEstateType = getRealEstateTypeEnum(request.realEstateType); + if (realEstateType && realEstateType.hasGardenSize) { + request.gardenSize = req.body.gardensize; + await request.save(); + } res.redirect(nextStepUrl); }; diff --git a/app/controllers/queryReview.js b/app/controllers/queryReview.js index a6ab699..4e6dc9f 100644 --- a/app/controllers/queryReview.js +++ b/app/controllers/queryReview.js @@ -1,6 +1,6 @@ const { currentRERequest } = require('../helpers/url'); const { getRegionName, getMunicipalityName } = require('../helpers/codes'); -const { realEstateTypes, sizes, gardenSizes, prices, getEnumTypeTitle } = require('../helpers/enums'); +const { realEstateTypes, sizes, gardenSizes, prices, getEnumTypeTitle, getRealEstateTypeEnum } = require('../helpers/enums'); const getQueryReview = async (req,res) => { const request = await currentRERequest(req); @@ -12,6 +12,9 @@ const getQueryReview = async (req,res) => { const { realEstateType, region, municipality, size, gardenSize, price } = request.dataValues; + const realEstateTypeObject = getRealEstateTypeEnum(realEstateType); + const enableGardenSizeEdit = realEstateTypeObject ? realEstateTypeObject.hasGardenSize : false; + const realEstateTypeTitle = realEstateType ? getEnumTypeTitle(realEstateTypes, realEstateType) : null; const regionName = region ? getRegionName(region) : null; const municipalityName = (region && municipality) ? getMunicipalityName(region, municipality) : null; @@ -45,7 +48,7 @@ const getQueryReview = async (req,res) => { { id: 'gardenSize', title: gardenSizeTitle, - url: `/okucnica/${uniqueId}?nextStep=pregled`, + url: enableGardenSizeEdit ? `/okucnica/${uniqueId}?nextStep=pregled` : '', }, { id: 'price', diff --git a/app/controllers/realEstateTypes.js b/app/controllers/realEstateTypes.js index 2a550e6..6b22c38 100644 --- a/app/controllers/realEstateTypes.js +++ b/app/controllers/realEstateTypes.js @@ -1,7 +1,7 @@ const db = require('../models/index'); const { currentRERequest } = require('../helpers/url'); -const { realEstateTypes } = require('../helpers/enums'); +const { realEstateTypes, getRealEstateTypeEnum } = require('../helpers/enums'); const getRealEstateTypes = (req,res) => { @@ -16,6 +16,9 @@ const postRealEstateTypes = async (req, res) => { if (request && request.uniqueId) { const nextStepUrl = `/${nextStepPage}/${request.uniqueId}`; request.realEstateType = req.body.realestatetype; + if (!getRealEstateTypeEnum(request.realEstateType).hasGardenSize){ + request.gardenSize = null; + } await request.save(); res.redirect(nextStepUrl) diff --git a/app/controllers/sizes.js b/app/controllers/sizes.js index 122cc82..c4f252f 100644 --- a/app/controllers/sizes.js +++ b/app/controllers/sizes.js @@ -1,5 +1,5 @@ const { currentRERequest } = require('../helpers/url'); -const { sizes } = require('../helpers/enums'); +const { sizes, getRealEstateTypeEnum } = require('../helpers/enums'); const getSize = (req,res) => { res.render('size', { sizes }); @@ -8,7 +8,10 @@ const getSize = (req,res) => { const postSize = async (req, res) => { const request = await currentRERequest(req); - const nextStepPage = req.query.nextStep || 'okucnica'; + const realEstateType = getRealEstateTypeEnum(request.realEstateType); + + const nextStep = realEstateType.hasGardenSize ? 'okucnica' : 'cijena'; + const nextStepPage = req.query.nextStep || nextStep; const nextStepUrl = `/${nextStepPage}/${request.uniqueId}`; request.size = req.body.size; diff --git a/app/helpers/enums.js b/app/helpers/enums.js index 738e222..2c3b177 100644 --- a/app/helpers/enums.js +++ b/app/helpers/enums.js @@ -1,7 +1,7 @@ const realEstateTypes = [ - { title: "Kuća", id: "kuca" }, - { title: "Stan", id: "stan" }, - { title: "Vikendica", id: "vikendica" } + { title: "Kuća", id: "kuca", hasGardenSize: true }, + { title: "Stan", id: "stan", hasGardenSize: false }, + { title: "Vikendica", id: "vikendica", hasGardenSize: true } ]; const sizes = [ @@ -31,8 +31,16 @@ const prices = [ { title: "preko 250 000 KM", id: "moreThan250kKM" } ]; +const getEnumObject = (enumType, enumId) => { + return enumType.find(enumValue => enumValue.id === enumId); +}; + +const getRealEstateTypeEnum = (enumId) => { + return getEnumObject(realEstateTypes, enumId) || null; +} + const getEnumTypeTitle = (enumType, enumId) => { - const enumObject = enumType.find(enumValue => enumValue.id === enumId); + const enumObject = getEnumObject(enumType, enumId); if (!enumObject){ return null; } @@ -44,5 +52,6 @@ module.exports = { sizes, gardenSizes, prices, + getRealEstateTypeEnum, getEnumTypeTitle, }; -- 2.47.3 From fc1275566ee75773d726af19aeeb65b2682e0e23 Mon Sep 17 00:00:00 2001 From: Bilal Catic Date: Wed, 22 May 2019 13:19:27 +0200 Subject: [PATCH 2/4] handle undefined realEstateType --- app/controllers/sizes.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/sizes.js b/app/controllers/sizes.js index c4f252f..f13b0f7 100644 --- a/app/controllers/sizes.js +++ b/app/controllers/sizes.js @@ -10,7 +10,7 @@ const postSize = async (req, res) => { const realEstateType = getRealEstateTypeEnum(request.realEstateType); - const nextStep = realEstateType.hasGardenSize ? 'okucnica' : 'cijena'; + const nextStep = realEstateType && realEstateType.hasGardenSize ? 'okucnica' : 'cijena'; const nextStepPage = req.query.nextStep || nextStep; const nextStepUrl = `/${nextStepPage}/${request.uniqueId}`; -- 2.47.3 From a3f76d20fe2689be52c59e29045bfd6b8e7f07e7 Mon Sep 17 00:00:00 2001 From: Bilal Catic Date: Wed, 22 May 2019 15:58:42 +0200 Subject: [PATCH 3/4] fix URL on send icon --- app/views/gardenSize.ejs | 15 ++++++--------- app/views/municipality.ejs | 15 ++++++--------- app/views/price.ejs | 15 ++++++--------- app/views/realEstateType.ejs | 19 ++++++++----------- app/views/region.ejs | 17 +++++++---------- app/views/size.ejs | 17 +++++++---------- 6 files changed, 40 insertions(+), 58 deletions(-) diff --git a/app/views/gardenSize.ejs b/app/views/gardenSize.ejs index 1c541cc..e751d70 100644 --- a/app/views/gardenSize.ejs +++ b/app/views/gardenSize.ejs @@ -8,8 +8,8 @@
    <% for(const gardenSize of gardenSizes) { %>
  • -
    <%= gardenSize.title %> - + @@ -21,12 +21,9 @@ diff --git a/app/views/municipality.ejs b/app/views/municipality.ejs index 2f83bb6..84cda22 100644 --- a/app/views/municipality.ejs +++ b/app/views/municipality.ejs @@ -7,9 +7,9 @@
      <% for(const municipality of municipalities) { %> -
    • -
      <%= municipality.name %> - +
    • + @@ -21,11 +21,8 @@ diff --git a/app/views/price.ejs b/app/views/price.ejs index acb1723..77cbb41 100644 --- a/app/views/price.ejs +++ b/app/views/price.ejs @@ -8,8 +8,8 @@
        <% for(const price of prices) { %>
      • -
        <%= price.title %> - + @@ -21,12 +21,9 @@ diff --git a/app/views/realEstateType.ejs b/app/views/realEstateType.ejs index c5dd48a..d8a0c24 100644 --- a/app/views/realEstateType.ejs +++ b/app/views/realEstateType.ejs @@ -6,10 +6,10 @@
          - <% for(const realEstatetype of realEstateTypes) { %> -
        • -
        • + @@ -21,13 +21,10 @@
        • diff --git a/app/views/region.ejs b/app/views/region.ejs index aae671f..e0b4466 100644 --- a/app/views/region.ejs +++ b/app/views/region.ejs @@ -7,9 +7,9 @@
            <% for(const region of regions) { %> -
          • -
            <%= region.name %> - +
          • + @@ -21,12 +21,9 @@ diff --git a/app/views/size.ejs b/app/views/size.ejs index e665d6b..c96d7c5 100644 --- a/app/views/size.ejs +++ b/app/views/size.ejs @@ -7,9 +7,9 @@
              <% for(const size of sizes) { %> -
            • -
              <%= size.title %> - +
            • + @@ -21,12 +21,9 @@ -- 2.47.3 From dd38602c5a3ee1462d08edb0a869bc4679113308 Mon Sep 17 00:00:00 2001 From: Bilal Catic Date: Wed, 22 May 2019 16:57:08 +0200 Subject: [PATCH 4/4] add simple email validation --- app/controllers/querySubmit.js | 19 +++++++++++----- app/helpers/email.js | 9 ++++++++ app/views/querySubmit.ejs | 40 +++++++++++++++++++++------------- 3 files changed, 48 insertions(+), 20 deletions(-) create mode 100644 app/helpers/email.js diff --git a/app/controllers/querySubmit.js b/app/controllers/querySubmit.js index e8acc29..4ed6863 100644 --- a/app/controllers/querySubmit.js +++ b/app/controllers/querySubmit.js @@ -1,20 +1,29 @@ const { currentRERequest } = require('../helpers/url'); +const { isValidEmail } = require('../helpers/email'); const getQuerySubmit = async (req,res) => { const nextStep = req.query.nextStep; + const error = req.query.error; res.render('querySubmit', { - nextStep + nextStep, + error }); }; const postQuerySubmit = async (req, res) => { const request = await currentRERequest(req); const nextStep = req.query.nextStep || '/ponovo'; - //TODO: validate email - request.email = req.body.email; - await request.save(); - res.redirect(nextStep); + + const emailInput = req.body.email; + + if (isValidEmail(emailInput)){ + request.email = req.body.email; + await request.save(); + res.redirect(nextStep); + } else { + res.redirect('?error=1'); + } }; module.exports = { diff --git a/app/helpers/email.js b/app/helpers/email.js new file mode 100644 index 0000000..c5b7d66 --- /dev/null +++ b/app/helpers/email.js @@ -0,0 +1,9 @@ + +const isValidEmail = (email) => { + const simpleEmailRegex = /^.+@.+\..+$/; + return (email && email.length < 250 && simpleEmailRegex.test(email)); +}; + +module.exports = { + isValidEmail +}; diff --git a/app/views/querySubmit.ejs b/app/views/querySubmit.ejs index 1a79b25..5612ce4 100644 --- a/app/views/querySubmit.ejs +++ b/app/views/querySubmit.ejs @@ -4,29 +4,39 @@
            -
            -
            - +
            +
            + +
            -
            -
            -
            - - Javi mi - + <% if (error) {%> +
            +
            +
            Greška ! Unesite ispravan email
            +
            +
            + <%}%> + -
            -
            -
            -

            * U svakom trenutku možete prekinuti slanje objava kroz link u e-mailu

            +
            +
            +

            * U svakom trenutku možete prekinuti slanje objava kroz link u e-mailu

            +
            -
            -- 2.47.3