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/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/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..f13b0f7 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 && 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/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/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, }; 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 @@