From 75daf55fdf730fb608ff9b5dc97a76a25ec0293f Mon Sep 17 00:00:00 2001 From: Bilal Catic Date: Fri, 13 Sep 2019 09:46:59 +0200 Subject: [PATCH] add migrations for new DB design --- .../20190912191829-add-realEstates-table.js | 64 +++++++++++++++++++ ...20190912215313-add-searchRequests-table.js | 60 +++++++++++++++++ ...12215556-add-searchRequestMatches-table.js | 45 +++++++++++++ 3 files changed, 169 insertions(+) create mode 100644 app/migrations/20190912191829-add-realEstates-table.js create mode 100644 app/migrations/20190912215313-add-searchRequests-table.js create mode 100644 app/migrations/20190912215556-add-searchRequestMatches-table.js diff --git a/app/migrations/20190912191829-add-realEstates-table.js b/app/migrations/20190912191829-add-realEstates-table.js new file mode 100644 index 0000000..a64fa1e --- /dev/null +++ b/app/migrations/20190912191829-add-realEstates-table.js @@ -0,0 +1,64 @@ +"use strict"; + +module.exports = { + up: (queryInterface, Sequelize) => { + const tableFields = { + id: { + type: Sequelize.BIGINT, + autoIncrement: true, + allowNull: false, + primaryKey: true + }, + url: { + type: Sequelize.TEXT, + allowNull: false + }, + agencyObjectId: { + type: Sequelize.TEXT, + allowNull: false + }, + originAgencyName: { + type: Sequelize.TEXT, + allowNull: false + }, + realEstateType: { + type: Sequelize.TEXT, + allowNull: false + }, + adType: { + type: Sequelize.TEXT, + allowNull: false + }, + price: Sequelize.REAL, + area: Sequelize.REAL, + gardenSize: Sequelize.REAL, + streetNumber: Sequelize.INTEGER, + streetName: Sequelize.TEXT, + locality: Sequelize.TEXT, + municipality: Sequelize.TEXT, + city: Sequelize.TEXT, + region: Sequelize.TEXT, + entity: Sequelize.TEXT, + country: Sequelize.TEXT, + locationLat: Sequelize.REAL, + locationLong: Sequelize.REAL, + lastTimeCrawled: { + type: Sequelize.DATE, + allowNull: false + }, + deleted: { + type: Sequelize.BOOLEAN, + allowNull: false + }, + sold: { + type: Sequelize.BOOLEAN, + allowNull: false + } + }; + return queryInterface.createTable("realEstates", tableFields); + }, + + down: queryInterface => { + return queryInterface.dropTable("realEstates", {}); + } +}; diff --git a/app/migrations/20190912215313-add-searchRequests-table.js b/app/migrations/20190912215313-add-searchRequests-table.js new file mode 100644 index 0000000..a0cf331 --- /dev/null +++ b/app/migrations/20190912215313-add-searchRequests-table.js @@ -0,0 +1,60 @@ +"use strict"; + +module.exports = { + up: (queryInterface, Sequelize) => { + const tableFields = { + id: { + type: Sequelize.UUID, + defaultValue: Sequelize.UUIDV4, + allowNull: false, + primaryKey: true + }, + areaToSearch: { + type: Sequelize.GEOMETRY("POINT", 4326), + allowNull: false + }, + realEstateType: { + type: Sequelize.TEXT, + allowNull: false + }, + adType: { + type: Sequelize.TEXT, + allowNull: false + }, + email: Sequelize.TEXT, + locality: Sequelize.TEXT, + municipality: Sequelize.TEXT, + city: Sequelize.TEXT, + region: Sequelize.TEXT, + entity: Sequelize.TEXT, + country: Sequelize.TEXT, + sizeMin: { + type: Sequelize.INTEGER, + allowNull: false + }, + sizeMax: { + type: Sequelize.INTEGER, + allowNull: false + }, + priceMin: { + type: Sequelize.INTEGER, + allowNull: false + }, + priceMax: { + type: Sequelize.INTEGER, + allowNull: false + }, + gardenSizeMin: Sequelize.INTEGER, + gardenSizeMax: Sequelize.INTEGER, + subscribed: { + type: Sequelize.BOOLEAN, + allowNull: false + } + }; + return queryInterface.createTable("searchRequests", tableFields); + }, + + down: queryInterface => { + return queryInterface.dropTable("searchRequests", {}); + } +}; diff --git a/app/migrations/20190912215556-add-searchRequestMatches-table.js b/app/migrations/20190912215556-add-searchRequestMatches-table.js new file mode 100644 index 0000000..24d80db --- /dev/null +++ b/app/migrations/20190912215556-add-searchRequestMatches-table.js @@ -0,0 +1,45 @@ +"use strict"; + +module.exports = { + up: (queryInterface, Sequelize) => { + const tableFields = { + id: { + type: Sequelize.BIGINT, + autoIncrement: true, + allowNull: false + }, + searchRequestId: { + type: Sequelize.UUID, + allowNull: false, + primaryKey: true, + references: { + model: "searchRequests", + key: "id" + }, + onUpdate: "CASCADE", + onDelete: "SET NULL" + }, + realEstateId: { + type: Sequelize.BIGINT, + allowNull: false, + primaryKey: true, + references: { + model: "realEstates", + key: "id" + }, + onUpdate: "CASCADE", + onDelete: "SET NULL" + }, + notified: { + type: Sequelize.BOOLEAN, + allowNull: false, + defaultValue: false + } + }; + return queryInterface.createTable("searchRequestMatches", tableFields); + }, + + down: queryInterface => { + return queryInterface.dropTable("searchRequestMatches", {}); + } +};