From f2d9369d5c1cb169ed7b205cda50f14abd4a7ea8 Mon Sep 17 00:00:00 2001 From: Naida Vatric Date: Thu, 19 Mar 2020 11:36:23 +0100 Subject: [PATCH] Added delete ability. --- app/controllers/deleteRealEstate.js | 27 +++++++++++++------ app/helpers/db/realEstate.js | 7 +++++ ...3739-add-columns-deleted-to-realestates.js | 22 +++++++++++++++ app/models/realEstate.js | 4 ++- app/services/searchMatchService.js | 9 +++++-- app/views/deleteRealEstate.ejs | 12 +++++++++ 6 files changed, 70 insertions(+), 11 deletions(-) create mode 100644 app/migrations/20200319093739-add-columns-deleted-to-realestates.js create mode 100644 app/views/deleteRealEstate.ejs diff --git a/app/controllers/deleteRealEstate.js b/app/controllers/deleteRealEstate.js index dc840ec..2d37c70 100644 --- a/app/controllers/deleteRealEstate.js +++ b/app/controllers/deleteRealEstate.js @@ -1,21 +1,32 @@ -const { currentSearchRequest } = require("../helpers/url"); +const { currentKiviRealEstate } = require("../helpers/url"); +const { findRealEstateByAgencyId } = require("../helpers/db/realEstate"); const getDeletePublishedAd = async (req, res) => { const title = "Uspješno ste izbrisali svoj oglas iz baze."; - const searchRequest = await currentSearchRequest(req); + const kiviOriginal = await currentKiviRealEstate(req); - if (!searchRequest || !searchRequest.dataValues) { + if (!kiviOriginal || !kiviOriginal.kiviAdId) { + res.render("notFound", { title: " " }); + return; + } + const realEstate = await findRealEstateByAgencyId(kiviOriginal.kiviAdId); + + if (!realEstate || !realEstate.dataValues) { res.render("notFound", { title: " " }); return; } - searchRequest.subscribed = false; - searchRequest.deletedEmail = searchRequest.email; - searchRequest.email = ""; - await searchRequest.save(); + realEstate.deleted = true; + realEstate.deletedAt = Date.now(); - res.render("unsubscribe", { nextStep: "/vrstanekretnine", title }); + kiviOriginal.email = ""; + + await realEstate.save(); + + await kiviOriginal.save(); + + res.render("deleteRealEstate", { nextStep: "/", title }); }; module.exports = { diff --git a/app/helpers/db/realEstate.js b/app/helpers/db/realEstate.js index 17392ef..d7ab15e 100644 --- a/app/helpers/db/realEstate.js +++ b/app/helpers/db/realEstate.js @@ -350,6 +350,13 @@ const findRealEstatesForSearchRequest = async (searchRequest, maxResults) => { } }; } + //Query only for real estated that are not deleted + query.deleted = { + [Op.eq]: false + }; + queryIncludeIncomplete.deleted = { + [Op.eq]: false + }; const order = [["updatedAt", "desc"]]; diff --git a/app/migrations/20200319093739-add-columns-deleted-to-realestates.js b/app/migrations/20200319093739-add-columns-deleted-to-realestates.js new file mode 100644 index 0000000..7c59dd2 --- /dev/null +++ b/app/migrations/20200319093739-add-columns-deleted-to-realestates.js @@ -0,0 +1,22 @@ +"use strict"; + +module.exports = { + up: (queryInterface, Sequelize) => { + return Promise.all([ + queryInterface.addColumn("RealEstates", "deleted", { + type: Sequelize.BOOLEAN, + defaultValue: false + }), + queryInterface.addColumn("RealEstates", "deletedAt", { + type: Sequelize.DATE + }) + ]); + }, + + down: (queryInterface, Sequelize) => { + return Promise.all([ + queryInterface.removeColumn("RealEstates", "deleted"), + queryInterface.removeColumn("RealEstates", "deletedAt") + ]); + } +}; diff --git a/app/models/realEstate.js b/app/models/realEstate.js index 0cb9374..4387f13 100644 --- a/app/models/realEstate.js +++ b/app/models/realEstate.js @@ -85,7 +85,9 @@ module.exports = (sequelize, DataTypes) => { utilityConnection: DataTypes.BOOLEAN, distanceToRiver: DataTypes.INTEGER, numberOfViewsAgency: DataTypes.INTEGER, - numberOfViewsKivi: DataTypes.INTEGER + numberOfViewsKivi: DataTypes.INTEGER, + deleted: DataTypes.BOOLEAN, + deletedAt: DataTypes.DATE }); return RealEstate; diff --git a/app/services/searchMatchService.js b/app/services/searchMatchService.js index f39d21d..54baa60 100644 --- a/app/services/searchMatchService.js +++ b/app/services/searchMatchService.js @@ -9,11 +9,16 @@ const { MAX_REAL_ESTATES_IN_FIRST_EMAIL } = require("../config/appConfig"); const { EMAIL_FREQUENCY } = require("../common/enums"); const matchRealEstates = async realEstates => { - if (Array.isArray(realEstates)) { + //Filter deleted real estates + const filteredRealEstates = realEstates.filter( + realEstate => realEstate.deleted === false + ); + + if (Array.isArray(filteredRealEstates)) { const asyncMatchActions = []; const matches = {}; const matchingRecords = []; - for (const realEstate of realEstates) { + for (const realEstate of filteredRealEstates) { const searchRequestsPromise = findSearchRequestsForRealEstate(realEstate); asyncMatchActions.push(searchRequestsPromise); diff --git a/app/views/deleteRealEstate.ejs b/app/views/deleteRealEstate.ejs new file mode 100644 index 0000000..1dae6d3 --- /dev/null +++ b/app/views/deleteRealEstate.ejs @@ -0,0 +1,12 @@ + +

+
+ kivi logo +
+
+ +