From 7ad1117cae21d51f54bce3a296cea5bb100aab81 Mon Sep 17 00:00:00 2001 From: Bilal Catic Date: Fri, 17 May 2019 11:06:32 +0200 Subject: [PATCH 1/9] add size screen --- app/controllers/municipalities.js | 7 ++-- app/controllers/sizes.js | 30 +++++++++++++++++ ...7072957-add-size-to-real-estate-request.js | 21 ++++++++++++ app/models/realestaterequest.js | 4 +++ app/views/size.ejs | 32 +++++++++++++++++++ index.js | 4 +++ 6 files changed, 95 insertions(+), 3 deletions(-) create mode 100644 app/controllers/sizes.js create mode 100644 app/migrations/20190517072957-add-size-to-real-estate-request.js create mode 100644 app/views/size.ejs diff --git a/app/controllers/municipalities.js b/app/controllers/municipalities.js index 46fb233..e471cfa 100644 --- a/app/controllers/municipalities.js +++ b/app/controllers/municipalities.js @@ -1,4 +1,4 @@ -const { currentRERequest } = require('../helpers/url'); +const { currentRERequest } = require('../helpers/url'); const { getMunicipalitiesForRegion } = require('../helpers/codes'); const getMunicipality = async (req,res) => { @@ -12,10 +12,11 @@ const getMunicipality = async (req,res) => { }; const postMunicipality = async (req, res) => { - let request = await currentRERequest(req); + const request = await currentRERequest(req); + const nextStep = req.query.nextStep || `/povrsina/${request.uniqueId}`; request.municipality = req.body.municipality; await request.save(); - res.send("Result is " + JSON.stringify(request)); + res.redirect(nextStep); }; module.exports = { diff --git a/app/controllers/sizes.js b/app/controllers/sizes.js new file mode 100644 index 0000000..812c887 --- /dev/null +++ b/app/controllers/sizes.js @@ -0,0 +1,30 @@ +const { currentRERequest } = require('../helpers/url'); + +const sizes = [ + { name: "do 50 m2", id: "50m2" }, + { name: "do 75 m2", id: "70m2" }, + { name: "do 100 m2", id: "100m2" }, + { name: "do 150 m2", id: "150m2" }, + { name: "do 200 m2", id: "200m2" }, + { name: "preko 200 m2", id: "moreThan200m2" } +]; + +const getSize = (req,res) => { + const nextStep = req.query.nextStep; + res.render('size', { + nextStep, + sizes + }); +}; + +const postSize = async (req, res) => { + const request = await currentRERequest(req); + request.size = req.body.size; + await request.save(); + res.send("Result is " + JSON.stringify(request)); +}; + +module.exports = { + getSize, + postSize +}; diff --git a/app/migrations/20190517072957-add-size-to-real-estate-request.js b/app/migrations/20190517072957-add-size-to-real-estate-request.js new file mode 100644 index 0000000..695879a --- /dev/null +++ b/app/migrations/20190517072957-add-size-to-real-estate-request.js @@ -0,0 +1,21 @@ +'use strict'; + +module.exports = { + up: (queryInterface, Sequelize) => { + return queryInterface.addColumn( + 'RealEstateRequests', + 'size', + { + type: Sequelize.ENUM, + values: ['50m2', '70m2', '100m2', '150m2', '200m2', 'moreThan200m2'] + } + ); + }, + + down: (queryInterface, Sequelize) => { + return queryInterface.removeColumn( + 'RealEstateRequests', + 'size' + ); + } +}; diff --git a/app/models/realestaterequest.js b/app/models/realestaterequest.js index 7162aee..2b1b584 100644 --- a/app/models/realestaterequest.js +++ b/app/models/realestaterequest.js @@ -13,6 +13,10 @@ module.exports = (sequelize, DataTypes) => { email: DataTypes.STRING, region: DataTypes.STRING, municipality: DataTypes.STRING, + size: { + type: DataTypes.ENUM, + values: ['50m2', '70m2', '100m2', '150m2', '200m2', 'moreThan200m2'] + } }, {}); RealEstateRequest.associate = function(models) { // associations can be defined here diff --git a/app/views/size.ejs b/app/views/size.ejs new file mode 100644 index 0000000..3b6c4fc --- /dev/null +++ b/app/views/size.ejs @@ -0,0 +1,32 @@ + +
+

Do koliko kvadrata tražite nekretninu ?

+
+ +
+
+
    + <% for(const size of sizes) { %> +
  • +
    <%= size.name %> + + send + +
    +
  • + <% } %> +
+ +
+
+ + + diff --git a/index.js b/index.js index e81c68b..3c92929 100644 --- a/index.js +++ b/index.js @@ -2,6 +2,7 @@ const welcome = require('./app/controllers/welcome').getWelcome; const { getRealEstateTypes, postRealEstateTypes} = require('./app/controllers/realEstateTypes'); const { getRegion, postRegion } = require('./app/controllers/regions'); const { getMunicipality, postMunicipality } = require('./app/controllers/municipalities'); +const { getSize, postSize } = require('./app/controllers/sizes'); let express = require("express"); const path = require("path"); @@ -121,6 +122,9 @@ app.post('/grad/:request_id', postRegion); app.get('/mjesto/:request_id', getMunicipality); app.post('/mjesto/:request_id', postMunicipality); +app.get('/povrsina/:request_id', getSize); +app.post('/povrsina/:request_id', postSize); + app.use('/assets', express.static('./app/public')); -- 2.47.3 From b15295bfe6f43f7356bcabbb13f3a7c0fc656636 Mon Sep 17 00:00:00 2001 From: Bilal Catic Date: Fri, 17 May 2019 11:12:24 +0200 Subject: [PATCH 2/9] add garden size screen --- app/controllers/gardenSizes.js | 30 +++++++++++++++++ app/controllers/sizes.js | 3 +- ...5-add-gardenSize-to-real-estate-request.js | 21 ++++++++++++ app/models/realestaterequest.js | 4 +++ app/views/gardenSize.ejs | 32 +++++++++++++++++++ index.js | 4 +++ 6 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 app/controllers/gardenSizes.js create mode 100644 app/migrations/20190517090015-add-gardenSize-to-real-estate-request.js create mode 100644 app/views/gardenSize.ejs diff --git a/app/controllers/gardenSizes.js b/app/controllers/gardenSizes.js new file mode 100644 index 0000000..d7477f9 --- /dev/null +++ b/app/controllers/gardenSizes.js @@ -0,0 +1,30 @@ +const { currentRERequest } = require('../helpers/url'); + +const gardenSizes = [ + { name: "do 100 m2", id: "100m2" }, + { name: "do 500 m2", id: "500m2" }, + { name: "do 1 dunum", id: "1000m2" }, + { name: "do 2 dunuma", id: "2000m2" }, + { name: "do 3 dunuma", id: "3000m2" }, + { name: "preko 3 dunuma", id: "moreThan3000m2" } +]; + +const getGardenSize = (req,res) => { + const nextStep = req.query.nextStep; + res.render('gardenSize', { + nextStep, + gardenSizes + }); +}; + +const postGardenSize = async (req, res) => { + const request = await currentRERequest(req); + request.gardenSize = req.body.gardensize; + await request.save(); + res.send("Result is " + JSON.stringify(request)); +}; + +module.exports = { + getGardenSize, + postGardenSize +}; diff --git a/app/controllers/sizes.js b/app/controllers/sizes.js index 812c887..66a47bd 100644 --- a/app/controllers/sizes.js +++ b/app/controllers/sizes.js @@ -19,9 +19,10 @@ const getSize = (req,res) => { const postSize = async (req, res) => { const request = await currentRERequest(req); + const nextStep = req.query.nextStep || `/okucnica/${request.uniqueId}`; request.size = req.body.size; await request.save(); - res.send("Result is " + JSON.stringify(request)); + res.redirect(nextStep); }; module.exports = { diff --git a/app/migrations/20190517090015-add-gardenSize-to-real-estate-request.js b/app/migrations/20190517090015-add-gardenSize-to-real-estate-request.js new file mode 100644 index 0000000..e65f9d5 --- /dev/null +++ b/app/migrations/20190517090015-add-gardenSize-to-real-estate-request.js @@ -0,0 +1,21 @@ +'use strict'; + +module.exports = { + up: (queryInterface, Sequelize) => { + return queryInterface.addColumn( + 'RealEstateRequests', + 'gardenSize', + { + type: Sequelize.ENUM, + values: ['100m2', '500m2', '1000m2', '2000m2', '3000m2', 'moreThan3000m2'] + } + ); + }, + + down: (queryInterface, Sequelize) => { + return queryInterface.removeColumn( + 'RealEstateRequests', + 'gardenSize' + ); + } +}; diff --git a/app/models/realestaterequest.js b/app/models/realestaterequest.js index 2b1b584..0ecf69f 100644 --- a/app/models/realestaterequest.js +++ b/app/models/realestaterequest.js @@ -16,6 +16,10 @@ module.exports = (sequelize, DataTypes) => { size: { type: DataTypes.ENUM, values: ['50m2', '70m2', '100m2', '150m2', '200m2', 'moreThan200m2'] + }, + gardenSize: { + type: DataTypes.ENUM, + values: ['100m2', '500m2', '1000m2', '2000m2', '3000m2', 'moreThan3000m2'] } }, {}); RealEstateRequest.associate = function(models) { diff --git a/app/views/gardenSize.ejs b/app/views/gardenSize.ejs new file mode 100644 index 0000000..7404bd2 --- /dev/null +++ b/app/views/gardenSize.ejs @@ -0,0 +1,32 @@ + +
+

Koliko okućnice tražite ?

+
+ +
+
+
    + <% for(const gardenSize of gardenSizes) { %> +
  • +
    <%= gardenSize.name %> + + send + +
    +
  • + <% } %> +
+ +
+
+ + + diff --git a/index.js b/index.js index 3c92929..d3aead6 100644 --- a/index.js +++ b/index.js @@ -3,6 +3,7 @@ const { getRealEstateTypes, postRealEstateTypes} = require('./app/controllers/re const { getRegion, postRegion } = require('./app/controllers/regions'); const { getMunicipality, postMunicipality } = require('./app/controllers/municipalities'); const { getSize, postSize } = require('./app/controllers/sizes'); +const { getGardenSize, postGardenSize } = require('./app/controllers/gardenSizes'); let express = require("express"); const path = require("path"); @@ -125,6 +126,9 @@ app.post('/mjesto/:request_id', postMunicipality); app.get('/povrsina/:request_id', getSize); app.post('/povrsina/:request_id', postSize); +app.get('/okucnica/:request_id', getGardenSize); +app.post('/okucnica/:request_id', postGardenSize); + app.use('/assets', express.static('./app/public')); -- 2.47.3 From c652a306db8add6dfd7b6999dcd2920fb81b5601 Mon Sep 17 00:00:00 2001 From: Bilal Catic Date: Fri, 17 May 2019 11:32:41 +0200 Subject: [PATCH 3/9] add price screen --- app/controllers/gardenSizes.js | 3 +- app/controllers/prices.js | 30 +++++++++++++++++ ...092716-add-price-to-real-estate-request.js | 21 ++++++++++++ app/models/realestaterequest.js | 4 +++ app/views/price.ejs | 32 +++++++++++++++++++ index.js | 4 +++ 6 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 app/controllers/prices.js create mode 100644 app/migrations/20190517092716-add-price-to-real-estate-request.js create mode 100644 app/views/price.ejs diff --git a/app/controllers/gardenSizes.js b/app/controllers/gardenSizes.js index d7477f9..ef98bfc 100644 --- a/app/controllers/gardenSizes.js +++ b/app/controllers/gardenSizes.js @@ -19,9 +19,10 @@ const getGardenSize = (req,res) => { const postGardenSize = async (req, res) => { const request = await currentRERequest(req); + const nextStep = req.query.nextStep || `/cijena/${request.uniqueId}`; request.gardenSize = req.body.gardensize; await request.save(); - res.send("Result is " + JSON.stringify(request)); + res.redirect(nextStep); }; module.exports = { diff --git a/app/controllers/prices.js b/app/controllers/prices.js new file mode 100644 index 0000000..640f8f8 --- /dev/null +++ b/app/controllers/prices.js @@ -0,0 +1,30 @@ +const { currentRERequest } = require('../helpers/url'); + +const prices = [ + { name: "do 50 000 KM", id: "50kKM" }, + { name: "do 100 000 KM", id: "100kKM" }, + { name: "do 150 000 KM", id: "150kKM" }, + { name: "do 200 000 KM", id: "200kKM" }, + { name: "do 250 000 KM", id: "250kKM" }, + { name: "preko 250 000 KM", id: "moreThan250kKM" } +]; + +const getPrice = (req,res) => { + const nextStep = req.query.nextStep; + res.render('price', { + nextStep, + prices + }); +}; + +const postPrice = async (req, res) => { + const request = await currentRERequest(req); + request.price = req.body.price; + await request.save(); + res.send("Result is " + JSON.stringify(request)); +}; + +module.exports = { + getPrice, + postPrice +}; diff --git a/app/migrations/20190517092716-add-price-to-real-estate-request.js b/app/migrations/20190517092716-add-price-to-real-estate-request.js new file mode 100644 index 0000000..87b2d18 --- /dev/null +++ b/app/migrations/20190517092716-add-price-to-real-estate-request.js @@ -0,0 +1,21 @@ +'use strict'; + +module.exports = { + up: (queryInterface, Sequelize) => { + return queryInterface.addColumn( + 'RealEstateRequests', + 'price', + { + type: Sequelize.ENUM, + values: ['50kKM', '100kKM', '150kKM', '200kKM', '250kKM', 'moreThan250kKM'] + } + ); + }, + + down: (queryInterface, Sequelize) => { + return queryInterface.removeColumn( + 'RealEstateRequests', + 'price' + ); + } +}; diff --git a/app/models/realestaterequest.js b/app/models/realestaterequest.js index 0ecf69f..3cfa511 100644 --- a/app/models/realestaterequest.js +++ b/app/models/realestaterequest.js @@ -20,6 +20,10 @@ module.exports = (sequelize, DataTypes) => { gardenSize: { type: DataTypes.ENUM, values: ['100m2', '500m2', '1000m2', '2000m2', '3000m2', 'moreThan3000m2'] + }, + price: { + type: DataTypes.ENUM, + values: ['50kKM', '100kKM', '150kKM', '200kKM', '250kKM', 'moreThan250kKM'] } }, {}); RealEstateRequest.associate = function(models) { diff --git a/app/views/price.ejs b/app/views/price.ejs new file mode 100644 index 0000000..e65e343 --- /dev/null +++ b/app/views/price.ejs @@ -0,0 +1,32 @@ + +
+

Koja Vam okvirna cijena odgovara ?

+
+ +
+
+
    + <% for(const price of prices) { %> +
  • +
    <%= price.name %> + + send + +
    +
  • + <% } %> +
+ +
+
+ + + diff --git a/index.js b/index.js index d3aead6..bbeb5e4 100644 --- a/index.js +++ b/index.js @@ -4,6 +4,7 @@ const { getRegion, postRegion } = require('./app/controllers/regions'); const { getMunicipality, postMunicipality } = require('./app/controllers/municipalities'); const { getSize, postSize } = require('./app/controllers/sizes'); const { getGardenSize, postGardenSize } = require('./app/controllers/gardenSizes'); +const { getPrice, postPrice } = require('./app/controllers/prices'); let express = require("express"); const path = require("path"); @@ -129,6 +130,9 @@ app.post('/povrsina/:request_id', postSize); app.get('/okucnica/:request_id', getGardenSize); app.post('/okucnica/:request_id', postGardenSize); +app.get('/cijena/:request_id', getPrice); +app.post('/cijena/:request_id', postPrice); + app.use('/assets', express.static('./app/public')); -- 2.47.3 From 53585d3ae1baf8f768494bd8f89ce1e72fd172c0 Mon Sep 17 00:00:00 2001 From: Bilal Catic Date: Sun, 19 May 2019 02:14:20 +0200 Subject: [PATCH 4/9] use enums from enum file --- app/controllers/gardenSizes.js | 10 +------- app/controllers/prices.js | 10 +------- app/controllers/realEstateTypes.js | 7 +----- app/controllers/sizes.js | 10 +------- app/helpers/enums.js | 39 ++++++++++++++++++++++++++++++ app/views/gardenSize.ejs | 2 +- app/views/price.ejs | 2 +- app/views/realEstateType.ejs | 2 +- app/views/size.ejs | 2 +- 9 files changed, 47 insertions(+), 37 deletions(-) create mode 100644 app/helpers/enums.js diff --git a/app/controllers/gardenSizes.js b/app/controllers/gardenSizes.js index ef98bfc..a449230 100644 --- a/app/controllers/gardenSizes.js +++ b/app/controllers/gardenSizes.js @@ -1,13 +1,5 @@ const { currentRERequest } = require('../helpers/url'); - -const gardenSizes = [ - { name: "do 100 m2", id: "100m2" }, - { name: "do 500 m2", id: "500m2" }, - { name: "do 1 dunum", id: "1000m2" }, - { name: "do 2 dunuma", id: "2000m2" }, - { name: "do 3 dunuma", id: "3000m2" }, - { name: "preko 3 dunuma", id: "moreThan3000m2" } -]; +const { gardenSizes } = require('../helpers/enums'); const getGardenSize = (req,res) => { const nextStep = req.query.nextStep; diff --git a/app/controllers/prices.js b/app/controllers/prices.js index 640f8f8..1d8fcb9 100644 --- a/app/controllers/prices.js +++ b/app/controllers/prices.js @@ -1,13 +1,5 @@ const { currentRERequest } = require('../helpers/url'); - -const prices = [ - { name: "do 50 000 KM", id: "50kKM" }, - { name: "do 100 000 KM", id: "100kKM" }, - { name: "do 150 000 KM", id: "150kKM" }, - { name: "do 200 000 KM", id: "200kKM" }, - { name: "do 250 000 KM", id: "250kKM" }, - { name: "preko 250 000 KM", id: "moreThan250kKM" } -]; +const { prices } = require('../helpers/enums'); const getPrice = (req,res) => { const nextStep = req.query.nextStep; diff --git a/app/controllers/realEstateTypes.js b/app/controllers/realEstateTypes.js index 125cb5f..2d66170 100644 --- a/app/controllers/realEstateTypes.js +++ b/app/controllers/realEstateTypes.js @@ -1,10 +1,5 @@ const db = require('../models/index'); - -const realEstateTypes = [ - { ime: "Kuća", id: "kuca" }, - { ime: "Stan", id: "stan" }, - { ime: "Vikendica", id: "vikendica" } -]; +const { realEstateTypes } = require('../helpers/enums'); const getRealEstateTypes = (req,res) => { const nextStep = req.query.nextStep; diff --git a/app/controllers/sizes.js b/app/controllers/sizes.js index 66a47bd..d75dac9 100644 --- a/app/controllers/sizes.js +++ b/app/controllers/sizes.js @@ -1,13 +1,5 @@ const { currentRERequest } = require('../helpers/url'); - -const sizes = [ - { name: "do 50 m2", id: "50m2" }, - { name: "do 75 m2", id: "70m2" }, - { name: "do 100 m2", id: "100m2" }, - { name: "do 150 m2", id: "150m2" }, - { name: "do 200 m2", id: "200m2" }, - { name: "preko 200 m2", id: "moreThan200m2" } -]; +const { sizes } = require('../helpers/enums'); const getSize = (req,res) => { const nextStep = req.query.nextStep; diff --git a/app/helpers/enums.js b/app/helpers/enums.js new file mode 100644 index 0000000..b4d5da2 --- /dev/null +++ b/app/helpers/enums.js @@ -0,0 +1,39 @@ +const realEstateTypes = [ + { title: "Kuća", id: "kuca" }, + { title: "Stan", id: "stan" }, + { title: "Vikendica", id: "vikendica" } +]; + +const sizes = [ + { title: "do 50 m2", id: "50m2" }, + { title: "do 75 m2", id: "75m2" }, + { title: "do 100 m2", id: "100m2" }, + { title: "do 150 m2", id: "150m2" }, + { title: "do 200 m2", id: "200m2" }, + { title: "preko 200 m2", id: "moreThan200m2" } +]; + +const gardenSizes = [ + { title: "do 100 m2", id: "100m2" }, + { title: "do 500 m2", id: "500m2" }, + { title: "do 1 dunum", id: "1000m2" }, + { title: "do 2 dunuma", id: "2000m2" }, + { title: "do 3 dunuma", id: "3000m2" }, + { title: "preko 3 dunuma", id: "moreThan3000m2" } +]; + +const prices = [ + { title: "do 50 000 KM", id: "50kKM" }, + { title: "do 100 000 KM", id: "100kKM" }, + { title: "do 150 000 KM", id: "150kKM" }, + { title: "do 200 000 KM", id: "200kKM" }, + { title: "do 250 000 KM", id: "250kKM" }, + { title: "preko 250 000 KM", id: "moreThan250kKM" } +]; + +module.exports = { + realEstateTypes, + sizes, + gardenSizes, + prices +}; diff --git a/app/views/gardenSize.ejs b/app/views/gardenSize.ejs index 7404bd2..1c541cc 100644 --- a/app/views/gardenSize.ejs +++ b/app/views/gardenSize.ejs @@ -8,7 +8,7 @@
    <% for(const gardenSize of gardenSizes) { %>
  • -
    <%= gardenSize.name %> +
    <%= gardenSize.title %> send diff --git a/app/views/price.ejs b/app/views/price.ejs index e65e343..acb1723 100644 --- a/app/views/price.ejs +++ b/app/views/price.ejs @@ -8,7 +8,7 @@
      <% for(const price of prices) { %>
    • -
      <%= price.name %> +
      <%= price.title %> send diff --git a/app/views/realEstateType.ejs b/app/views/realEstateType.ejs index 934a8c6..c5dd48a 100644 --- a/app/views/realEstateType.ejs +++ b/app/views/realEstateType.ejs @@ -8,7 +8,7 @@
        <% for(const realEstatetype of realEstateTypes) { %>
      • -
        <%= realEstatetype.ime %> +
        <%= realEstatetype.title %> send diff --git a/app/views/size.ejs b/app/views/size.ejs index 3b6c4fc..e665d6b 100644 --- a/app/views/size.ejs +++ b/app/views/size.ejs @@ -8,7 +8,7 @@
          <% for(const size of sizes) { %>
        • -
          <%= size.name %> +
          <%= size.title %> send -- 2.47.3 From b07eb5bbeb8ca2a74e7692b39a8330ff07eee7ee Mon Sep 17 00:00:00 2001 From: Bilal Catic Date: Sun, 19 May 2019 10:03:36 +0200 Subject: [PATCH 5/9] fix available value input for size --- .../20190517072957-add-size-to-real-estate-request.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/migrations/20190517072957-add-size-to-real-estate-request.js b/app/migrations/20190517072957-add-size-to-real-estate-request.js index 695879a..a41c12f 100644 --- a/app/migrations/20190517072957-add-size-to-real-estate-request.js +++ b/app/migrations/20190517072957-add-size-to-real-estate-request.js @@ -7,7 +7,7 @@ module.exports = { 'size', { type: Sequelize.ENUM, - values: ['50m2', '70m2', '100m2', '150m2', '200m2', 'moreThan200m2'] + values: ['50m2', '75m2', '100m2', '150m2', '200m2', 'moreThan200m2'] } ); }, -- 2.47.3 From 2c415bbd7960f2dff52b72522a7e01f20173753a Mon Sep 17 00:00:00 2001 From: Bilal Catic Date: Sun, 19 May 2019 10:03:52 +0200 Subject: [PATCH 6/9] use enums from enum file --- app/models/realestaterequest.js | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/app/models/realestaterequest.js b/app/models/realestaterequest.js index 3cfa511..08ed040 100644 --- a/app/models/realestaterequest.js +++ b/app/models/realestaterequest.js @@ -1,5 +1,13 @@ 'use strict'; +const {realEstateTypes, sizes, gardenSizes, prices } = require('../helpers/enums'); + module.exports = (sequelize, DataTypes) => { + + const realEstateTypeValues = realEstateTypes.map(realEstateType => realEstateType.id); + const sizeValues = sizes.map(size => size.id); + const gardenSizeValues = gardenSizes.map(gardenSize => gardenSize.id); + const priceValues = prices.map(price => price.id); + const RealEstateRequest = sequelize.define('RealEstateRequest', { uniqueId: { type: DataTypes.UUID, @@ -8,22 +16,22 @@ module.exports = (sequelize, DataTypes) => { }, realEstateType: { type: DataTypes.ENUM, - values: ['kuca','stan','vikendica','plac','poslovni_prostor','apartman','garaza'] + values: realEstateTypeValues, }, email: DataTypes.STRING, region: DataTypes.STRING, municipality: DataTypes.STRING, size: { type: DataTypes.ENUM, - values: ['50m2', '70m2', '100m2', '150m2', '200m2', 'moreThan200m2'] + values: sizeValues, }, gardenSize: { type: DataTypes.ENUM, - values: ['100m2', '500m2', '1000m2', '2000m2', '3000m2', 'moreThan3000m2'] + values: gardenSizeValues, }, price: { type: DataTypes.ENUM, - values: ['50kKM', '100kKM', '150kKM', '200kKM', '250kKM', 'moreThan250kKM'] + values: priceValues, } }, {}); RealEstateRequest.associate = function(models) { -- 2.47.3 From 70ddc1f734deac4b1090fd9e2b905cc0e3113a7f Mon Sep 17 00:00:00 2001 From: Bilal Catic Date: Sun, 19 May 2019 12:29:55 +0200 Subject: [PATCH 7/9] add query review page --- app/controllers/prices.js | 3 +- app/controllers/queryReview.js | 72 ++++++++++++++++++++++++++++++++++ app/helpers/codes.js | 35 +++++++++++++---- app/helpers/enums.js | 11 +++++- app/views/queryReview.ejs | 36 +++++++++++++++++ index.js | 4 ++ 6 files changed, 152 insertions(+), 9 deletions(-) create mode 100644 app/controllers/queryReview.js create mode 100644 app/views/queryReview.ejs diff --git a/app/controllers/prices.js b/app/controllers/prices.js index 1d8fcb9..58127bf 100644 --- a/app/controllers/prices.js +++ b/app/controllers/prices.js @@ -11,9 +11,10 @@ const getPrice = (req,res) => { const postPrice = async (req, res) => { const request = await currentRERequest(req); + const nextStep = req.query.nextStep || `/pregled/${request.uniqueId}`; request.price = req.body.price; await request.save(); - res.send("Result is " + JSON.stringify(request)); + res.redirect(nextStep); }; module.exports = { diff --git a/app/controllers/queryReview.js b/app/controllers/queryReview.js new file mode 100644 index 0000000..71d234e --- /dev/null +++ b/app/controllers/queryReview.js @@ -0,0 +1,72 @@ +const { currentRERequest } = require('../helpers/url'); +const { getRegionName, getMunicipalityName } = require('../helpers/codes'); +const { realEstateTypes, sizes, gardenSizes, prices, getEnumTypeTitle } = require('../helpers/enums'); + +const getQueryReview = async (req,res) => { + const request = await currentRERequest(req); + const nextStep = req.query.nextStep; + + if (!request || !request.dataValues) { + return null; + } + + const { realEstateType, region, municipality, size, gardenSize, price } = request.dataValues; + + const realEstateTypeTitle = realEstateType ? getEnumTypeTitle(realEstateTypes, realEstateType) : null; + const regionName = region ? getRegionName(region) : null; + const municipalityName = (region && municipality) ? getMunicipalityName(region, municipality) : null; + const sizeTitle = size ? getEnumTypeTitle(sizes, size) : null; + const gardenSizeTitle = gardenSize ? getEnumTypeTitle(gardenSizes, gardenSize) : null; + const priceTitle = price ? getEnumTypeTitle(prices, price) : null; + + const uniqueId = request.dataValues.uniqueId ? request.dataValues.uniqueId : ''; + + const queryData = [ + { + id: 'realEstateType', + title: realEstateTypeTitle, + url: `/vrstanekretnine/${uniqueId}`, + }, + { + id: 'region', + title: regionName, + url: `/region/${uniqueId}`, + }, + { + id: 'municipality', + title: municipalityName, + url: `/mjesto/${uniqueId}`, + }, + { + id: 'size', + title: sizeTitle, + url: `/povrsina/${uniqueId}`, + }, + { + id: 'gardenSize', + title: gardenSizeTitle, + url: `/okucnica/${uniqueId}`, + }, + { + id: 'price', + title: priceTitle, + url: `/cijena/${uniqueId}` + } + ]; + + res.render('queryReview', { + nextStep, + queryData, + }); +}; + +const postQueryReview = async (req, res) => { + const request = await currentRERequest(req); + await request.save(); + res.send("Result is " + JSON.stringify(request)); +}; + +module.exports = { + getQueryReview, + postQueryReview +}; diff --git a/app/helpers/codes.js b/app/helpers/codes.js index 53272d0..5ec86cd 100644 --- a/app/helpers/codes.js +++ b/app/helpers/codes.js @@ -876,16 +876,37 @@ const getRegions = () => { return regions.map( (g) => ({ name: g.name, id: g.id, olxid: g.olxid }) ); }; +const getRegion = (regionId) => { + return regions.find(region => region.id === regionId); +}; + +const getRegionName = (regionId) => { + const region = getRegion(regionId); + return (region && region.name) ? region.name : null; +}; + const getMunicipalitiesForRegion = (regionId) => { - for (geo of regions) { - if(geo.id === regionId) { - return geo.municipalities; - } - } - return null; + const region = getRegion(regionId); + return (region && region.municipalities) ? region.municipalities : null; +}; + +const getMunicipalityName = (regionId, municipalityId) => { + const region = getRegion(regionId); + if (!region){ + return null; + } + + const municipality = region.municipalities.find(municipality => municipality.id === municipalityId); + if (!municipality) { + return null; + } + + return municipality.name; }; module.exports = { getRegions, - getMunicipalitiesForRegion + getRegionName, + getMunicipalitiesForRegion, + getMunicipalityName, }; diff --git a/app/helpers/enums.js b/app/helpers/enums.js index b4d5da2..738e222 100644 --- a/app/helpers/enums.js +++ b/app/helpers/enums.js @@ -31,9 +31,18 @@ const prices = [ { title: "preko 250 000 KM", id: "moreThan250kKM" } ]; +const getEnumTypeTitle = (enumType, enumId) => { + const enumObject = enumType.find(enumValue => enumValue.id === enumId); + if (!enumObject){ + return null; + } + return enumObject.title; +}; + module.exports = { realEstateTypes, sizes, gardenSizes, - prices + prices, + getEnumTypeTitle, }; diff --git a/app/views/queryReview.ejs b/app/views/queryReview.ejs new file mode 100644 index 0000000..b81c9ff --- /dev/null +++ b/app/views/queryReview.ejs @@ -0,0 +1,36 @@ + +
          +

          Da li je ovo to što ste tražili ?

          +
          + +
          +
          +
            + <% for(const stepData of queryData) { %> +
          • +
            <%= stepData.title || '-' %> + + edit + +
            +
          • + <% } %> +
          +
          + +
          + + + diff --git a/index.js b/index.js index bbeb5e4..82bf4df 100644 --- a/index.js +++ b/index.js @@ -5,6 +5,7 @@ const { getMunicipality, postMunicipality } = require('./app/controllers/municip const { getSize, postSize } = require('./app/controllers/sizes'); const { getGardenSize, postGardenSize } = require('./app/controllers/gardenSizes'); const { getPrice, postPrice } = require('./app/controllers/prices'); +const { getQueryReview, postQueryReview } = require('./app/controllers/queryReview'); let express = require("express"); const path = require("path"); @@ -133,6 +134,9 @@ app.post('/okucnica/:request_id', postGardenSize); app.get('/cijena/:request_id', getPrice); app.post('/cijena/:request_id', postPrice); +app.get('/pregled/:request_id', getQueryReview); +app.post('/pregled/:request_id', postQueryReview); + app.use('/assets', express.static('./app/public')); -- 2.47.3 From 87dc742e41a4b6f3527140a6f8f08e5352f4c6fa Mon Sep 17 00:00:00 2001 From: Bilal Catic Date: Sun, 19 May 2019 13:34:44 +0200 Subject: [PATCH 8/9] add query submit page --- app/controllers/queryReview.js | 5 +++-- app/controllers/querySubmit.js | 22 ++++++++++++++++++++++ app/views/querySubmit.ejs | 33 +++++++++++++++++++++++++++++++++ index.js | 3 +++ 4 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 app/controllers/querySubmit.js create mode 100644 app/views/querySubmit.ejs diff --git a/app/controllers/queryReview.js b/app/controllers/queryReview.js index 71d234e..438848b 100644 --- a/app/controllers/queryReview.js +++ b/app/controllers/queryReview.js @@ -62,8 +62,9 @@ const getQueryReview = async (req,res) => { const postQueryReview = async (req, res) => { const request = await currentRERequest(req); - await request.save(); - res.send("Result is " + JSON.stringify(request)); + const nextStep = req.query.nextStep || `/posalji/${request.uniqueId}`; + + res.redirect(nextStep); }; module.exports = { diff --git a/app/controllers/querySubmit.js b/app/controllers/querySubmit.js new file mode 100644 index 0000000..cf5a740 --- /dev/null +++ b/app/controllers/querySubmit.js @@ -0,0 +1,22 @@ +const { currentRERequest } = require('../helpers/url'); + +const getQuerySubmit = async (req,res) => { + const nextStep = req.query.nextStep; + + res.render('querySubmit', { + nextStep + }); +}; + +const postQuerySubmit = async (req, res) => { + const request = await currentRERequest(req); + //TODO: validate email + request.email = req.body.email; + await request.save(); + res.send("Result is " + JSON.stringify(request)); +}; + +module.exports = { + getQuerySubmit, + postQuerySubmit +}; diff --git a/app/views/querySubmit.ejs b/app/views/querySubmit.ejs new file mode 100644 index 0000000..1a79b25 --- /dev/null +++ b/app/views/querySubmit.ejs @@ -0,0 +1,33 @@ + +
          +

          Da Vam javimo kada se Vaša željena nekretnina pojavi u oglasima, upišite svoj e-mail

          +
          + +
          +
          +
          + +
          +
          + +
          +
          +

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

          +
          +
          +
          + + + diff --git a/index.js b/index.js index 82bf4df..0dd76eb 100644 --- a/index.js +++ b/index.js @@ -6,6 +6,7 @@ const { getSize, postSize } = require('./app/controllers/sizes'); const { getGardenSize, postGardenSize } = require('./app/controllers/gardenSizes'); const { getPrice, postPrice } = require('./app/controllers/prices'); const { getQueryReview, postQueryReview } = require('./app/controllers/queryReview'); +const { getQuerySubmit, postQuerySubmit } = require('./app/controllers/querySubmit'); let express = require("express"); const path = require("path"); @@ -137,6 +138,8 @@ app.post('/cijena/:request_id', postPrice); app.get('/pregled/:request_id', getQueryReview); app.post('/pregled/:request_id', postQueryReview); +app.get('/posalji/:request_id', getQuerySubmit); +app.post('/posalji/:request_id', postQuerySubmit); app.use('/assets', express.static('./app/public')); -- 2.47.3 From 1c2847509ac47d12269e6a2c6e9128119d71c068 Mon Sep 17 00:00:00 2001 From: Bilal Catic Date: Sun, 19 May 2019 19:45:19 +0200 Subject: [PATCH 9/9] add final page --- app/controllers/goAgain.js | 7 +++++++ app/controllers/querySubmit.js | 3 ++- app/views/goAgain.ejs | 25 +++++++++++++++++++++++++ index.js | 3 +++ 4 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 app/controllers/goAgain.js create mode 100644 app/views/goAgain.ejs diff --git a/app/controllers/goAgain.js b/app/controllers/goAgain.js new file mode 100644 index 0000000..5261171 --- /dev/null +++ b/app/controllers/goAgain.js @@ -0,0 +1,7 @@ +const getGoAgain = async (req,res) => { + res.render('goAgain'); +}; + +module.exports = { + getGoAgain +}; diff --git a/app/controllers/querySubmit.js b/app/controllers/querySubmit.js index cf5a740..e8acc29 100644 --- a/app/controllers/querySubmit.js +++ b/app/controllers/querySubmit.js @@ -10,10 +10,11 @@ const getQuerySubmit = async (req,res) => { 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.send("Result is " + JSON.stringify(request)); + res.redirect(nextStep); }; module.exports = { diff --git a/app/views/goAgain.ejs b/app/views/goAgain.ejs new file mode 100644 index 0000000..422b0f0 --- /dev/null +++ b/app/views/goAgain.ejs @@ -0,0 +1,25 @@ + +
          +

          Provjerite Vaš email !

          +
          + +
          +

          Želite li pretražiti još jednu nekretninu ?

          +
          + +
          +
          + + + +
          +
          + diff --git a/index.js b/index.js index 0dd76eb..88a3c24 100644 --- a/index.js +++ b/index.js @@ -7,6 +7,7 @@ const { getGardenSize, postGardenSize } = require('./app/controllers/gardenSizes const { getPrice, postPrice } = require('./app/controllers/prices'); const { getQueryReview, postQueryReview } = require('./app/controllers/queryReview'); const { getQuerySubmit, postQuerySubmit } = require('./app/controllers/querySubmit'); +const { getGoAgain } = require('./app/controllers/goAgain'); let express = require("express"); const path = require("path"); @@ -141,6 +142,8 @@ app.post('/pregled/:request_id', postQueryReview); app.get('/posalji/:request_id', getQuerySubmit); app.post('/posalji/:request_id', postQuerySubmit); +app.get('/ponovo', getGoAgain); + app.use('/assets', express.static('./app/public')); app.listen(port, () => console.log(`Example app listening on port ${port}!`)); -- 2.47.3