From 81ecb37493a5cd27a759f4a8ffec52445e473197 Mon Sep 17 00:00:00 2001 From: Bilal Catic Date: Fri, 13 Sep 2019 09:47:49 +0200 Subject: [PATCH] add models for new DB design --- app/models/realEstate.js | 65 ++++++++++++++++++++++++++++++++ app/models/searchRequest.js | 61 ++++++++++++++++++++++++++++++ app/models/searchRequestMatch.js | 47 +++++++++++++++++++++++ 3 files changed, 173 insertions(+) create mode 100644 app/models/realEstate.js create mode 100644 app/models/searchRequest.js create mode 100644 app/models/searchRequestMatch.js diff --git a/app/models/realEstate.js b/app/models/realEstate.js new file mode 100644 index 0000000..66b7a92 --- /dev/null +++ b/app/models/realEstate.js @@ -0,0 +1,65 @@ +"use strict"; + +module.exports = (sequelize, DataTypes) => { + const RealEstate = sequelize.define("RealEstate", { + id: { + type: DataTypes.BIGINT, + autoIncrement: true, + allowNull: false, + primaryKey: true + }, + url: { + type: DataTypes.TEXT, + allowNull: false + }, + agencyObjectId: { + type: DataTypes.TEXT, + allowNull: false + }, + originAgencyName: { + type: DataTypes.TEXT, + allowNull: false + }, + realEstateType: { + type: DataTypes.TEXT, + allowNull: false + }, + adType: { + type: DataTypes.TEXT, + allowNull: false + }, + price: DataTypes.REAL, + area: DataTypes.REAL, + gardenSize: DataTypes.REAL, + streetNumber: DataTypes.INTEGER, + streetName: DataTypes.TEXT, + locality: DataTypes.TEXT, + municipality: DataTypes.TEXT, + city: DataTypes.TEXT, + region: DataTypes.TEXT, + entity: DataTypes.TEXT, + country: DataTypes.TEXT, + locationLat: DataTypes.REAL, + locationLong: DataTypes.REAL, + lastTimeCrawled: { + type: DataTypes.DATE, + allowNull: false + }, + deleted: { + type: DataTypes.BOOLEAN, + allowNull: false + }, + sold: { + type: DataTypes.BOOLEAN, + allowNull: false + } + }); + + RealEstate.associate = models => { + RealEstate.belongsToMany(models.SearchRequestMatch, { + through: "SearchRequestMatch" + }); + }; + + return RealEstate; +}; diff --git a/app/models/searchRequest.js b/app/models/searchRequest.js new file mode 100644 index 0000000..9c350cd --- /dev/null +++ b/app/models/searchRequest.js @@ -0,0 +1,61 @@ +"use strict"; + +module.exports = (sequelize, DataTypes) => { + const SearchRequest = sequelize.define("SearchRequest", { + id: { + type: DataTypes.UUID, + defaultValue: DataTypes.UUIDV4, + allowNull: false, + primaryKey: true + }, + areaToSearch: { + type: DataTypes.GEOMETRY("POINT", 4326), + allowNull: false + }, + realEstateType: { + type: DataTypes.TEXT, + allowNull: false + }, + adType: { + type: DataTypes.TEXT, + allowNull: false + }, + email: DataTypes.TEXT, + locality: DataTypes.TEXT, + municipality: DataTypes.TEXT, + city: DataTypes.TEXT, + region: DataTypes.TEXT, + entity: DataTypes.TEXT, + country: DataTypes.TEXT, + sizeMin: { + type: DataTypes.INTEGER, + allowNull: false + }, + sizeMax: { + type: DataTypes.INTEGER, + allowNull: false + }, + priceMin: { + type: DataTypes.INTEGER, + allowNull: false + }, + priceMax: { + type: DataTypes.INTEGER, + allowNull: false + }, + gardenSizeMin: DataTypes.INTEGER, + gardenSizeMax: DataTypes.INTEGER, + subscribed: { + type: DataTypes.BOOLEAN, + allowNull: false + } + }); + + SearchRequest.associate = models => { + SearchRequest.belongsToMany(models.SearchRequestMatch, { + through: "SearchRequestMatch" + }); + }; + + return SearchRequest; +}; diff --git a/app/models/searchRequestMatch.js b/app/models/searchRequestMatch.js new file mode 100644 index 0000000..6f9d048 --- /dev/null +++ b/app/models/searchRequestMatch.js @@ -0,0 +1,47 @@ +"use strict"; + +module.exports = (sequelize, DataTypes) => { + const SearchRequestMatch = sequelize.define( + "SearchRequestMatch", + { + id: { + type: DataTypes.BIGINT, + autoIncrement: true, + allowNull: false + }, + searchRequestId: { + type: DataTypes.UUID, + allowNull: false, + primaryKey: true, + references: { + model: "SearchRequest", + key: "id" + } + }, + realEstateId: { + type: DataTypes.BIGINT, + allowNull: false, + primaryKey: true, + references: { + model: "RealEstate", + key: "id" + }, + onUpdate: "CASCADE", + onDelete: "SET NULL" + }, + notified: { + type: DataTypes.BOOLEAN, + allowNull: false, + defaultValue: false + } + }, + { + name: { + singular: "searchRequestMatch", + plural: "searchRequestMatches" + } + } + ); + + return SearchRequestMatch; +};