From 9f1fe3641d2cbb5305c13bbc9371559feadb6c23 Mon Sep 17 00:00:00 2001 From: Naida Vatric Date: Thu, 12 Mar 2020 22:46:47 +0100 Subject: [PATCH] For revision kivi ads input. --- app/controllers/publishRealEstate.js | 16 ++++++-- app/helpers/db/kiviOriginalAdsPhotos.js | 17 ++++++++ .../20200312210336-add-table-kivi-photos.js | 39 ++++++++++++++++++ app/models/kiviOriginalAdsPhotos.js | 41 +++++++++++++++++++ app/views/publishPhotos.ejs | 3 -- app/views/publishRealEstate.ejs | 32 ++++++--------- 6 files changed, 121 insertions(+), 27 deletions(-) create mode 100644 app/helpers/db/kiviOriginalAdsPhotos.js create mode 100644 app/migrations/20200312210336-add-table-kivi-photos.js create mode 100644 app/models/kiviOriginalAdsPhotos.js diff --git a/app/controllers/publishRealEstate.js b/app/controllers/publishRealEstate.js index dc68f58..4686cd8 100644 --- a/app/controllers/publishRealEstate.js +++ b/app/controllers/publishRealEstate.js @@ -1,4 +1,5 @@ const { findRealEstateByAgencyId } = require("../helpers/db/realEstate"); +const { bulkUpsertKiviPhotos } = require("../helpers/db/kiviOriginalAdsPhotos"); const { currentKiviRealEstate } = require("../helpers/url"); const validate = require("validate.js"); @@ -183,7 +184,7 @@ const postPublishInputs = async (req, res) => { const nextStepPage = req.query.nextStep || "/uspjesnaobjava"; //Request body - console.log("Body:", req.body); + //console.log("Body:", req.body); const balcony = req.body.balcony === "on"; const elevator = req.body.elevator === "on"; @@ -245,9 +246,16 @@ const postPublishInputs = async (req, res) => { const locationLong = req.body.lng || null; //Contact email saved in other table const contactEmail = req.body.email || ""; - - const imageUrls = req.body.imageUrls.split("|") || []; - console.log(imageUrls); + //Image urls are stored in new table + const imageUrls = + req.body.imageUrls.split("|").filter(url => url !== "") || []; + const imageUrlsData = imageUrls.map(url => { + return { + kiviAdId: kiviOriginal.kiviAdId, + photoUrl: url + }; + }); + const savedImageUrls = await bulkUpsertKiviPhotos(imageUrlsData); realEstate.balcony = balcony; realEstate.elevator = elevator; diff --git a/app/helpers/db/kiviOriginalAdsPhotos.js b/app/helpers/db/kiviOriginalAdsPhotos.js new file mode 100644 index 0000000..5533897 --- /dev/null +++ b/app/helpers/db/kiviOriginalAdsPhotos.js @@ -0,0 +1,17 @@ +"use strict"; +const db = require("../../models/index"); +const sequelize = require("sequelize"); + +const bulkUpsertKiviPhotos = async kiviPhotosData => { + try { + return await db.KiviOriginalAdsPhotos.bulkCreate(kiviPhotosData, { + ignoreDuplicates: true + }); + } catch (e) { + console.log("Error bulk upserting kiviOriginalAdsPhotos : ", e); + } +}; + +module.exports = { + bulkUpsertKiviPhotos +}; diff --git a/app/migrations/20200312210336-add-table-kivi-photos.js b/app/migrations/20200312210336-add-table-kivi-photos.js new file mode 100644 index 0000000..cef01f5 --- /dev/null +++ b/app/migrations/20200312210336-add-table-kivi-photos.js @@ -0,0 +1,39 @@ +"use strict"; + +module.exports = { + up: (queryInterface, Sequelize) => { + const tableFields = { + id: { + type: Sequelize.BIGINT, + autoIncrement: true, + primaryKey: true, + allowNull: false + }, + kiviAdId: { + type: Sequelize.UUID, + allowNull: false, + references: { + model: "KiviOriginal", + key: "kiviAdId" + } + }, + photoUrl: { + type: Sequelize.TEXT, + allowNull: false + }, + createdAt: { + type: Sequelize.DATE, + defaultValue: Sequelize.literal("NOW()") + }, + updatedAt: { + type: Sequelize.DATE, + defaultValue: Sequelize.literal("NOW()") + } + }; + return queryInterface.createTable("KiviOriginalAdsPhotos", tableFields); + }, + + down: (queryInterface, Sequelize) => { + return queryInterface.dropTable("KiviOriginalAdsPhotos", {}); + } +}; diff --git a/app/models/kiviOriginalAdsPhotos.js b/app/models/kiviOriginalAdsPhotos.js new file mode 100644 index 0000000..8321a0e --- /dev/null +++ b/app/models/kiviOriginalAdsPhotos.js @@ -0,0 +1,41 @@ +"use strict"; + +module.exports = (sequalize, DataTypes) => { + const KiviOriginalAdsPhotos = sequalize.define( + "KiviOriginalAdsPhotos", + { + id: { + type: DataTypes.BIGINT, + autoIncrement: true, + primaryKey: true, + allowNull: false + }, + kiviAdId: { + type: DataTypes.UUID, + allowNull: false, + references: { + model: "KiviOriginal", + key: "kiviAdId" + } + }, + photoUrl: { + type: DataTypes.TEXT, + allowNull: false + } + }, + { + freezeTableName: true + } + ); + + KiviOriginalAdsPhotos.associate = models => { + KiviOriginalAdsPhotos.hasMany(models.KiviOriginal, { + foreignKey: "kiviAdId", + sourceKey: "kiviAdId", + targetKey: "kiviAdId", + as: "kiviOriginal" + }); + }; + + return KiviOriginalAdsPhotos; +}; diff --git a/app/views/publishPhotos.ejs b/app/views/publishPhotos.ejs index 2c02ca1..3b28e75 100644 --- a/app/views/publishPhotos.ejs +++ b/app/views/publishPhotos.ejs @@ -8,8 +8,5 @@
-
- -
diff --git a/app/views/publishRealEstate.ejs b/app/views/publishRealEstate.ejs index 5074074..0e61eda 100644 --- a/app/views/publishRealEstate.ejs +++ b/app/views/publishRealEstate.ejs @@ -91,11 +91,11 @@ autoProcessQueue:false, //not to upload files automaticly method: "put", //or post parallelUploads: 1, - uploadMultiple: false, //or true ?? + uploadMultiple: false, addRemoveLinks: true, maxFilesize: 2, //MB, resizeWidth: 600, - maxFiles: 10, // ?? + maxFiles: 10, acceptedFiles: "image/*", dictDefaultMessage: `

Prevuci fotografije ili klikni za dodavanje!

@@ -227,20 +227,8 @@ } - -$("#test").click(function(e){ - e.preventDefault(); - const addedFiles = photosUploader.files.filter(file => file.status!=="error"); - console.log(addedFiles); - addedFiles.forEach( async (file) => { - await generateSignedURL(file); - }) - - }); - - - $("#submit").click( function () { - + $("#submit").click( async function (e) { + e.preventDefault(); if (marker) { const currentLocation = marker.getPosition(); @@ -258,7 +246,6 @@ $("#test").click(function(e){ $("#lng").val(0); } - //Tag for checking of error presence let hasErrors = false; //Check if email is valid @@ -284,14 +271,19 @@ $("#test").click(function(e){ validate (input); } */ + const addedFiles = photosUploader.files.filter(file => file.status!=="error"); + const asyncUpload =[]; + + addedFiles.forEach( file => { + asyncUpload.push(generateSignedURL(file)); + }) if (!hasErrors) { + await Promise.all(asyncUpload); $("#publishForm").submit(); }; - - - + }); });