Skip to content

Commit 7ef0d02

Browse files
authored
Merge pull request #170 from topcoderinc/drone_service_updates
Drone service updates
2 parents c9a0c80 + ee112f3 commit 7ef0d02

File tree

8 files changed

+38
-9
lines changed

8 files changed

+38
-9
lines changed

config/default.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ module.exports = {
2121
API_VERSION: 1,
2222
RESET_CODE_EXPIRES: 60 * 60,
2323
db: {
24-
url: process.env.MONGOLAB_URI || 'mongodb://localhost:27017/drones',
24+
url: process.env.MONGOLAB_URI || 'mongodb://heroku_fx9hv53r:[email protected]:43588/heroku_fx9hv53r',
2525
poolSize: 5,
2626
},
2727
mail: {

config/production.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ module.exports = {
1717
SALT_WORK_FACTOR: 2,
1818
TOKEN_EXPIRES: 10 * 60 * 60,
1919
db: {
20-
url: process.env.MONGOLAB_URI || 'mongodb://localhost:27017/drones',
20+
url: process.env.MONGOLAB_URI || 'mongodb://heroku_fx9hv53r:[email protected]:43588/heroku_fx9hv53r',
2121
poolSize: 5,
2222
},
2323
};

config/test.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
module.exports = {
1414
db: {
15-
url: 'mongodb://localhost:27017/drones_test',
15+
url: 'mongodb://heroku_fx9hv53r:[email protected]:43588/heroku_fx9hv53r',
1616
poolSize: 5,
1717
},
1818
};

data/demoData/drones.json

+9-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
[
22
{
33
"name": "BoldBird",
4-
"status": "idle-busy",
4+
"serialNumber": "BoldBird1",
5+
"make": "DJI",
6+
"model": "F450",
7+
"status": "idle-ready",
58
"accessories": {
69
"accessorie": {
710
"name": "drone0 accessories"
@@ -36,6 +39,10 @@
3639
"hasGPS": true,
3740
"hasObstacleSensors": true,
3841
"hasUltraSonicAltimeter": false,
39-
"description": "description and so on"
42+
"description": "description and so on",
43+
"altitute": 100,
44+
"speed": 150,
45+
"heading": 213,
46+
"lastSeen": "2017-01-12T20:46:05.686Z"
4047
}
4148
]

generate-demo-data.js

-1
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,6 @@ co(function*() {
147147
for (let i = 0; i < drones.length; i++) {
148148
drones[i].provider = providerDocs[i % providerDocs.length].id;
149149
drones[i].pilots = [providerUserDocs[i % providerUserDocs.length]];
150-
drones[i].serialNumber = 'serialNumber' + i;
151150
droneDocs.push(yield Drone.create(drones[i]));
152151
}
153152

models/Drone.js

+8-1
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,15 @@ const Mixed = mongoose.Schema.Types.Mixed;
2121
const DroneSchema = new mongoose.Schema({
2222
name: {type: String, required: true},
2323
description: { type: String, required: false },
24-
status: {type: String, enum: _.values(DroneStatus), required: true},
24+
status: {type: String, enum: _.values(DroneStatus), required: false},
2525
// realtime coordinate of the drone
2626
currentLocation: {type: [Number], index: {type: '2dsphere', sparse: true}},
2727
deviceId: { type: String, required: false },
2828
provider: {type: ObjectId, required: false, ref: 'Provider'},
2929
pilots: {type: [{type: ObjectId, ref: 'User'}]},
3030
serialNumber: {type: String, required: true},
31+
make: String,
32+
model: String,
3133
accessories: {type: Mixed},
3234
system: {type: String},
3335
maxFlightTime: {type: Number},
@@ -57,6 +59,11 @@ const DroneSchema = new mongoose.Schema({
5759
hasGPS: Boolean,
5860
hasObstacleSensors: Boolean,
5961
hasUltraSonicAltimeter: Boolean,
62+
63+
altitute: Number,
64+
speed: Number,
65+
heading: Number,
66+
lastSeen: Date,
6067
});
6168

6269
DroneSchema.plugin(timestamps);

models/DronePosition.js

+3
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ const DronePositionSchema = new mongoose.Schema({
1717
droneId: { type: mongoose.Schema.ObjectId, required: true, refs: 'Drone' },
1818
lat: { type: Number, required: true },
1919
lng: { type: Number, required: true },
20+
altitude: Number,
21+
heading: Number,
22+
speed: Number,
2023
});
2124

2225
DronePositionSchema.plugin(timestamps);

services/DroneService.js

+15-2
Original file line numberDiff line numberDiff line change
@@ -229,15 +229,21 @@ function *getSingle(id) {
229229
updateLocation.schema = {
230230
id: joi.string().required(),
231231
entity: joi.object().keys({
232-
lat: joi.number().required(),
233-
lng: joi.number().required(),
232+
lat: joi.number(), // Made these not required, we need to turn this into a general drone update endpoint / service (so we can update just status, speed, ...etc)
233+
lng: joi.number(),
234+
status: joi.string(),
235+
altitude: joi.number(),
236+
heading: joi.number(),
237+
speed: joi.number(),
238+
lastSeen: joi.string(),
234239
}).required(),
235240
returnNFZ: joi.boolean(),
236241
nfzFields: joi.array().items(joi.string()),
237242
nfzLimit: joi.limit(),
238243
nearDronesMaxDist: joi.number().min(0),
239244
nearDroneFields: joi.array().items(joi.string()),
240245
nearDronesLimit: joi.limit().default(1),
246+
241247
};
242248

243249
/**
@@ -259,7 +265,14 @@ function *updateLocation(id, entity, returnNFZ, nfzFields, nfzLimit, nearDronesM
259265
throw new errors.NotFoundError(`Current logged in provider does not have this drone , id = ${id}`);
260266
}
261267

268+
entity.lng = entity.lng || drone.currentLocation[0];
269+
entity.lat = entity.lat || drone.currentLocation[1];
262270
drone.currentLocation = [entity.lng, entity.lat];
271+
drone.status = entity.status || drone.status;
272+
drone.altitude = entity.altitude;
273+
drone.heading = entity.heading;
274+
drone.speed = entity.speed;
275+
drone.lastSeen = new Date();
263276
yield drone.save();
264277

265278
entity.droneId = id;

0 commit comments

Comments
 (0)