add models for new DB design

This commit is contained in:
Bilal Catic
2019-09-13 09:47:49 +02:00
parent 75daf55fdf
commit 81ecb37493
3 changed files with 173 additions and 0 deletions

65
app/models/realEstate.js Normal file
View File

@@ -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;
};

View File

@@ -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;
};

View File

@@ -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;
};