2016-10-30 14:01:21 +00:00
|
|
|
var Sequelize = require("sequelize");
|
|
|
|
|
2017-04-28 00:52:29 +00:00
|
|
|
var elevation = require("../elevation");
|
2016-10-30 14:01:21 +00:00
|
|
|
var utils = require("../utils");
|
|
|
|
|
|
|
|
module.exports = function(Database) {
|
|
|
|
Database.prototype._init.push(function() {
|
|
|
|
this._conn.define("Marker", {
|
|
|
|
"lat" : this._TYPES.lat,
|
|
|
|
"lon" : this._TYPES.lon,
|
|
|
|
name : { type: Sequelize.TEXT, allowNull: true, get: function() { return this.getDataValue("name") || "Untitled marker"; } },
|
|
|
|
colour : { type: Sequelize.STRING(6), allowNull: false, defaultValue: "ff0000", validate: this._TYPES.validateColour },
|
|
|
|
size : { type: Sequelize.INTEGER.UNSIGNED, allowNull: false, defaultValue: 25, validate: { min: 15 } },
|
2017-04-28 00:52:29 +00:00
|
|
|
symbol : { type: Sequelize.TEXT, allowNull: true },
|
2017-11-17 21:07:12 +00:00
|
|
|
shape : { type: Sequelize.TEXT, allowNull: true },
|
2017-04-28 00:52:29 +00:00
|
|
|
ele: { type: Sequelize.INTEGER, allowNull: true }
|
2016-10-30 14:01:21 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
this._conn.define("MarkerData", this._TYPES.dataDefinition);
|
|
|
|
});
|
|
|
|
|
|
|
|
Database.prototype._afterInit.push(function() {
|
|
|
|
var Marker = this._conn.model("Marker");
|
|
|
|
this._conn.model("Pad").hasMany(Marker, this._makeNotNullForeignKey("Markers", "padId"));
|
|
|
|
Marker.belongsTo(this._conn.model("Pad"), this._makeNotNullForeignKey("pad", "padId"));
|
|
|
|
Marker.belongsTo(this._conn.model("Type"), this._makeNotNullForeignKey("type", "typeId", true));
|
|
|
|
|
|
|
|
this._conn.model("MarkerData").belongsTo(Marker, this._makeNotNullForeignKey("marker", "markerId"));
|
|
|
|
Marker.hasMany(this._conn.model("MarkerData"), { foreignKey: "markerId" });
|
|
|
|
});
|
|
|
|
|
|
|
|
// =====================================================================================================================
|
|
|
|
|
|
|
|
utils.extend(Database.prototype, {
|
|
|
|
getPadMarkers(padId, bbox) {
|
2016-10-31 12:08:22 +00:00
|
|
|
return this._getPadObjects("Marker", padId, { where: this._makeBboxCondition(bbox) });
|
2016-10-30 14:01:21 +00:00
|
|
|
},
|
|
|
|
|
|
|
|
getPadMarkersByType(padId, typeId) {
|
2016-10-31 12:08:22 +00:00
|
|
|
return this._getPadObjects("Marker", padId, { where: { padId: padId, typeId: typeId } });
|
2016-10-30 14:01:21 +00:00
|
|
|
},
|
|
|
|
|
|
|
|
createMarker(padId, data) {
|
|
|
|
return utils.promiseAuto({
|
|
|
|
type: this.getType(padId, data.typeId),
|
2017-04-28 00:52:29 +00:00
|
|
|
|
|
|
|
elevation: elevation.getElevationForPoint(data),
|
|
|
|
|
|
|
|
create: (type, elevation) => {
|
2016-10-30 14:01:21 +00:00
|
|
|
if(type.defaultColour)
|
|
|
|
data.colour = type.defaultColour;
|
|
|
|
if(type.defaultSize)
|
|
|
|
data.size = type.defaultSize;
|
|
|
|
if(type.defaultSymbol)
|
|
|
|
data.symbol = type.defaultSymbol;
|
2017-11-17 21:07:12 +00:00
|
|
|
if(type.defaultShape)
|
|
|
|
data.shape = type.defaultShape;
|
2016-10-30 14:01:21 +00:00
|
|
|
|
2017-04-28 00:52:29 +00:00
|
|
|
data.ele = elevation;
|
|
|
|
|
2016-10-31 12:08:22 +00:00
|
|
|
return this._createPadObject("Marker", padId, data);
|
2016-10-30 14:01:21 +00:00
|
|
|
},
|
|
|
|
styles: (create) => {
|
|
|
|
return this._updateObjectStyles(create, false)
|
|
|
|
}
|
|
|
|
}).then((res) => {
|
|
|
|
this.emit("marker", padId, res.create);
|
|
|
|
|
|
|
|
return res.create;
|
|
|
|
});
|
|
|
|
},
|
|
|
|
|
|
|
|
updateMarker(padId, markerId, data, doNotUpdateStyles) {
|
|
|
|
return utils.promiseAuto({
|
2017-04-28 00:52:29 +00:00
|
|
|
elevation: () => {
|
|
|
|
if(data.lat != null && data.lon != null)
|
|
|
|
return elevation.getElevationForPoint(data);
|
|
|
|
},
|
|
|
|
update: (elevation) => {
|
|
|
|
if(elevation != null)
|
|
|
|
data.ele = elevation;
|
|
|
|
|
|
|
|
return this._updatePadObject("Marker", padId, markerId, data, doNotUpdateStyles);
|
|
|
|
},
|
2016-10-30 14:01:21 +00:00
|
|
|
updateStyles: (update) => {
|
|
|
|
if(!doNotUpdateStyles)
|
|
|
|
return this._updateObjectStyles(update, false);
|
|
|
|
}
|
|
|
|
}).then((res) => {
|
|
|
|
this.emit("marker", padId, res.update);
|
|
|
|
|
|
|
|
return res.update;
|
|
|
|
});
|
|
|
|
},
|
|
|
|
|
|
|
|
deleteMarker(padId, markerId) {
|
2016-10-31 12:08:22 +00:00
|
|
|
return this._deletePadObject("Marker", padId, markerId).then(del => {
|
2016-10-30 14:01:21 +00:00
|
|
|
this.emit("deleteMarker", padId, { id: del.id });
|
|
|
|
|
|
|
|
return del;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
});
|
|
|
|
};
|