diff --git a/app/controllers/publishRealEstate.js b/app/controllers/publishRealEstate.js index 8bb66a5..3e1b159 100644 --- a/app/controllers/publishRealEstate.js +++ b/app/controllers/publishRealEstate.js @@ -173,6 +173,10 @@ const getPublishInputs = async (req, res) => { const postPublishInputs = async (req, res) => { const kiviOriginal = await currentKiviRealEstate(req); + if (!kiviOriginal || !kiviOriginal.kiviAdId) { + res.render("notFound", { title: " " }); + return; + } const realEstate = await findRealEstateByAgencyId(kiviOriginal.kiviAdId); if (!realEstate || !realEstate.dataValues) { @@ -181,6 +185,8 @@ const postPublishInputs = async (req, res) => { } const nextStepPage = req.query.nextStep || "/uspjesnaobjava"; + // + console.log("Req body:", req.body); const balcony = req.body.balcony === "on"; const elevator = req.body.elevator === "on"; @@ -292,6 +298,8 @@ const postPublishInputs = async (req, res) => { kiviOriginal.email = contactEmail; + //console.log("realEstate", realEstate); + await realEstate.save(); await kiviOriginal.save(); diff --git a/app/controllers/viewRealEstate.js b/app/controllers/viewRealEstate.js new file mode 100644 index 0000000..403e902 --- /dev/null +++ b/app/controllers/viewRealEstate.js @@ -0,0 +1,170 @@ +const { findRealEstateByAgencyId } = require("../helpers/db/realEstate"); +const { currentKiviRealEstate } = require("../helpers/url"); + +const { + BASIC_BOOLEAN_PUBLISH, + BASIC_SEGMENT_PUBLISH, + ADDITIONAL_BOOLEAN_PUBLISH, + ADDITIONAL_SEGMENT_PUBLISH, + BASIC_INPUT_PUBLISH, + ADDITIONAL_INPUT_PUBLISH +} = require("../common/publishEnums"); + +const getViewRealEstate = async (req, res) => { + const kiviOriginal = await currentKiviRealEstate(req); + + if (!kiviOriginal || !kiviOriginal.kiviAdId) { + res.render("notFound", { title: " " }); + return; + } + const realEstate = await findRealEstateByAgencyId(kiviOriginal.kiviAdId); + + if (!realEstate || !realEstate.dataValues) { + res.render("notFound", { title: " " }); + return; + } + + const pageTitle = "Pregled nekretnine"; + + const { + price, + area, + adType, + realEstateType, + locationLat, + locationLong, + accessRoadType, + heatingType, + balcony, + newBuilding, + elevator, + recentlyAdapted, + gardenSize, + numberOfRooms, + numberOfFloors, + floor, + water, + electricity, + drainageSystem, + registeredInZkBooks, + parking, + garage, + gas, + antiTheftDoor, + airCondition, + phoneConnection, + cableTV, + internet, + basementAttic, + storeRoom, + videoSurveillance, + alarm, + suitableForStudents, + includingBills, + animalsAllowed, + pool, + exchange, + urbanPlanPermit, + buildingPermit, + furnishingType, + shortDescription, + streetName, + title, + longDescription + } = realEstate; + //Categorize all database values by value type - input, boolean or segment selected + const allInputValues = { + price, + area, + gardenSize, + numberOfRooms, + numberOfFloors, + floor, + title, + shortDescription, + streetName, + longDescription + }; + const allBooleanValues = { + balcony, + elevator, + newBuilding, + recentlyAdapted, + water, + electricity, + drainageSystem, + registeredInZkBooks, + parking, + garage, + gas, + antiTheftDoor, + airCondition, + phoneConnection, + cableTV, + internet, + basementAttic, + storeRoom, + videoSurveillance, + alarm, + suitableForStudents, + includingBills, + animalsAllowed, + pool, + exchange, + urbanPlanPermit, + buildingPermit + }; + + const allSegmentSelectedValues = { + furnishingType, + accessRoadType, + heatingType + }; + + //We need titles of fields ex Balkon, Novogradnja + const ALL_BOOLEAN_FIELDS = [ + ...BASIC_BOOLEAN_PUBLISH, + ...ADDITIONAL_BOOLEAN_PUBLISH + ]; + const ALL_INPUT_FIELDS = [ + ...BASIC_INPUT_PUBLISH, + ...ADDITIONAL_INPUT_PUBLISH + ]; + const ALL_SEGMENT_FIELDS = [ + ...BASIC_SEGMENT_PUBLISH, + ...ADDITIONAL_SEGMENT_PUBLISH + ]; + // + console.log("ALL BOOLEAN FIELDS:", ALL_BOOLEAN_FIELDS); + console.log("All boolean values", allBooleanValues); + //On view add page we will show only values that are not - null, or "", or undefined + const forShowing = value => { + return value !== false && value !== null && value !== ""; + }; + //Filter all values to be shown on page or not + //For showing on page we also need title ex. "Balkon" + const booleanFields = ALL_BOOLEAN_FIELDS.filter(object => { + return forShowing(allBooleanValues[object.dbField]); + }); + const inputFields = ALL_INPUT_FIELDS.filter(object => { + return forShowing(allInputValues[object.dbField]); + }); + const segmentFields = ALL_SEGMENT_FIELDS.filter(object => { + return forShowing(allSegmentSelectedValues[object.dbField]); + }); + + //console.log("booleanFields", booleanFields); + + res.render("viewRealEstate", { + title: pageTitle, + booleanFields, + inputFields, + allInputValues, + segmentFields, + allSegmentSelectedValues + }); +}; + +module.exports = { + getViewRealEstate +}; diff --git a/app/helpers/url.js b/app/helpers/url.js index fcc1825..a59e2d9 100644 --- a/app/helpers/url.js +++ b/app/helpers/url.js @@ -1,6 +1,7 @@ const { getSearchRequest } = require("./db/searchRequest"); const { getRealEstateById } = require("./db/realEstate"); const { getKiviOriginalById } = require("./db/kiviOriginal"); +const validator = require("validator"); const currentSearchRequest = async req => { const searchRequestId = @@ -19,7 +20,7 @@ const currentRealEstate = async req => { const currentKiviRealEstate = async req => { const kiviRealEstateId = req && req.params ? req.params["kiviRealEstateId"] : null; - if (!kiviRealEstateId) return null; + if (!kiviRealEstateId || !validator.isUUID(kiviRealEstateId)) return null; return await getKiviOriginalById(kiviRealEstateId); }; diff --git a/app/routes/index.js b/app/routes/index.js index 68a40a3..e09c544 100644 --- a/app/routes/index.js +++ b/app/routes/index.js @@ -15,6 +15,7 @@ const { getPublishInputs, postPublishInputs } = require("../controllers/publishRealEstate"); +const { getViewRealEstate } = require("../controllers/viewRealEstate"); const { getQueryReview, postQueryReview @@ -45,6 +46,8 @@ router.post("/objavinekretninu", postPublishTypes); router.get("/podacionekretnini/:kiviRealEstateId", getPublishInputs); router.post("/podacionekretnini/:kiviRealEstateId", postPublishInputs); +router.get("/preglednekretnine/:kiviRealEstateId", getViewRealEstate); + router.get("/lokacija/:searchRequestId", getLocation); router.post("/lokacija/:searchRequestId", postLocation); diff --git a/app/views/publishPhotos.ejs b/app/views/publishPhotos.ejs index 651862f..bb41f73 100644 --- a/app/views/publishPhotos.ejs +++ b/app/views/publishPhotos.ejs @@ -9,7 +9,7 @@
\ No newline at end of file diff --git a/app/views/publishRealEstate.ejs b/app/views/publishRealEstate.ejs index 78564e8..9a863a5 100644 --- a/app/views/publishRealEstate.ejs +++ b/app/views/publishRealEstate.ejs @@ -1,5 +1,5 @@
-
+
    @@ -198,6 +198,9 @@ } */ if (!hasErrors) { + // + alert("Pokusavam submit formu!"); + $("#publishForm").submit(); }; diff --git a/app/views/viewRealEstate.ejs b/app/views/viewRealEstate.ejs new file mode 100644 index 0000000..fb64c1a --- /dev/null +++ b/app/views/viewRealEstate.ejs @@ -0,0 +1,33 @@ +
    +
    +<% for (const field of booleanFields){ %> +

    + <%= field.title %> + +

    +<% } %> +
    + +
    +
    +<% for (const field of inputFields){ %> +

    + <%= field.title %> + <%= allInputValues[field.dbField] %> +

    +<% } %> +
    + +
    +
    +<% for (const field of segmentFields){ %> +

    + <%= field.title %> + <% for (const segmentObject of field.values) { %> + <% if (allSegmentSelectedValues[field.dbField] === segmentObject.id) { %> + <%= segmentObject.title %> + <% } %>> + <% } %> +

    +<% } %> +
    \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 58ecc85..6b29a04 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4137,6 +4137,11 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "validator": { + "version": "10.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-10.11.0.tgz", + "integrity": "sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw==" } } }, @@ -4951,9 +4956,9 @@ "integrity": "sha512-PnFM3xiZ+kYmLyTiMgTYmU7ZHkjBZz2/+F0DaALc/uUtVzdCt1wAosvYJ5hFQi/hz8O4zb52FQhHZRC+uVkJ+g==" }, "validator": { - "version": "10.11.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-10.11.0.tgz", - "integrity": "sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw==" + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-12.2.0.tgz", + "integrity": "sha512-jJfE/DW6tIK1Ek8nCfNFqt8Wb3nzMoAbocBF6/Icgg1ZFSBpObdnwVY2jQj6qUqzhx5jc71fpvBWyLGO7Xl+nQ==" }, "vary": { "version": "1.1.2", diff --git a/package.json b/package.json index 0741340..3ea2953 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,8 @@ "react-step-wizard": "^5.1.0", "sequelize": "^5.18.4", "sequelize-cli": "^5.5.0", - "validate.js": "^0.13.1" + "validate.js": "^0.13.1", + "validator": "^12.2.0" }, "devDependencies": { "nodemon": "^1.19.0"