diff --git a/app/common/publishEnums.js b/app/common/publishEnums.js index 93f6073..e98f361 100644 --- a/app/common/publishEnums.js +++ b/app/common/publishEnums.js @@ -6,16 +6,6 @@ const { } = require("./enums"); const BASIC_BOOLEAN_PUBLISH = [ - { - dbField: "balcony", - title: "Balkon", - categoriesToShow: [ - AD_CATEGORY.FLAT, - AD_CATEGORY.HOUSE, - AD_CATEGORY.APARTMENT, - AD_CATEGORY.COTTAGE - ] - }, { dbField: "newBuilding", title: "Novogradnja", @@ -28,6 +18,17 @@ const BASIC_BOOLEAN_PUBLISH = [ AD_CATEGORY.GARAGE ] }, + { + dbField: "balcony", + title: "Balkon", + categoriesToShow: [ + AD_CATEGORY.FLAT, + AD_CATEGORY.HOUSE, + AD_CATEGORY.APARTMENT, + AD_CATEGORY.COTTAGE + ] + }, + { dbField: "elevator", title: "Lift", @@ -51,6 +52,34 @@ const BASIC_BOOLEAN_PUBLISH = [ ]; const BASIC_INPUT_PUBLISH = [ + { + dbField: "title", + title: "Naslov", + categoriesToShow: [ + AD_CATEGORY.FLAT, + AD_CATEGORY.HOUSE, + AD_CATEGORY.APARTMENT, + AD_CATEGORY.COTTAGE, + AD_CATEGORY.OFFICE, + AD_CATEGORY.LAND, + AD_CATEGORY.GARAGE + ], + constraint: ["required"] + }, + { + dbField: "shortDescription", + title: "Opis", + categoriesToShow: [ + AD_CATEGORY.FLAT, + AD_CATEGORY.HOUSE, + AD_CATEGORY.APARTMENT, + AD_CATEGORY.COTTAGE, + AD_CATEGORY.OFFICE, + AD_CATEGORY.LAND, + AD_CATEGORY.GARAGE + ], + constraint: [] + }, { dbField: "price", title: "Cijena (KM)", @@ -85,6 +114,20 @@ const BASIC_INPUT_PUBLISH = [ categoriesToShow: [AD_CATEGORY.HOUSE, AD_CATEGORY.COTTAGE], constraint: ["numerical"] }, + { + dbField: "streetName", + title: "Adresa", + categoriesToShow: [ + AD_CATEGORY.FLAT, + AD_CATEGORY.HOUSE, + AD_CATEGORY.APARTMENT, + AD_CATEGORY.COTTAGE, + AD_CATEGORY.OFFICE, + AD_CATEGORY.LAND, + AD_CATEGORY.GARAGE + ], + constraint: [] + }, { dbField: "numberOfRooms", title: "Broj soba", @@ -117,48 +160,6 @@ const BASIC_INPUT_PUBLISH = [ AD_CATEGORY.OFFICE ], constraint: ["integer"] - }, - { - dbField: "title", - title: "Naslov", - categoriesToShow: [ - AD_CATEGORY.FLAT, - AD_CATEGORY.HOUSE, - AD_CATEGORY.APARTMENT, - AD_CATEGORY.COTTAGE, - AD_CATEGORY.OFFICE, - AD_CATEGORY.LAND, - AD_CATEGORY.GARAGE - ], - constraint: ["required"] - }, - { - dbField: "shortDescription", - title: "Opis", - categoriesToShow: [ - AD_CATEGORY.FLAT, - AD_CATEGORY.HOUSE, - AD_CATEGORY.APARTMENT, - AD_CATEGORY.COTTAGE, - AD_CATEGORY.OFFICE, - AD_CATEGORY.LAND, - AD_CATEGORY.GARAGE - ], - constraint: [] - }, - { - dbField: "streetName", - title: "Adresa", - categoriesToShow: [ - AD_CATEGORY.FLAT, - AD_CATEGORY.HOUSE, - AD_CATEGORY.APARTMENT, - AD_CATEGORY.COTTAGE, - AD_CATEGORY.OFFICE, - AD_CATEGORY.LAND, - AD_CATEGORY.GARAGE - ], - constraint: [] } ]; diff --git a/app/controllers/publishRealEstate.js b/app/controllers/publishRealEstate.js index 90ccec4..eff5175 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"); @@ -188,6 +189,9 @@ const postPublishInputs = async (req, res) => { const nextStepPage = req.query.nextStep || "/uspjesnaobjava"; + //Request body + //console.log("Body:", req.body); + const balcony = req.body.balcony === "on"; const elevator = req.body.elevator === "on"; const newBuilding = req.body.newBuilding === "on"; @@ -248,6 +252,16 @@ const postPublishInputs = async (req, res) => { const locationLong = req.body.lng || null; //Contact email saved in other table const contactEmail = req.body.email || ""; + //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/public/main.css b/app/public/main.css index 8d8fd80..33e5ff1 100644 --- a/app/public/main.css +++ b/app/public/main.css @@ -164,7 +164,6 @@ h3 { } .custom-col { - width: 18%; margin-left: auto; left: auto; right: auto; @@ -190,3 +189,16 @@ h3 { opacity: 1; position: relative; } +.dropzone { + background: white; + border-radius: 10px; + border: 4px dashed #02adba; + border-image: none; + max-width: 80%; + margin-left: auto; + margin-right: auto; +} + +.dz-progress { + display: none; +} diff --git a/app/views/layout.ejs b/app/views/layout.ejs index 9ee5b2a..c14d048 100644 --- a/app/views/layout.ejs +++ b/app/views/layout.ejs @@ -9,14 +9,21 @@ gtag('js', new Date()); gtag('config', '<%= process.env.GA_ID %>'); - + + + + + + @@ -52,6 +59,9 @@ <% } else { %>