refactor reserve and release endpoints in HTTP POST and DELETE methods

This commit is contained in:
Vishal Banthia
2015-12-07 17:49:34 +09:00
parent dccacea43f
commit bca180d284
6 changed files with 189 additions and 174 deletions

View File

@@ -1,18 +1,15 @@
var Promise = require('bluebird')
var _ = require('lodash')
var dbapi = require('../../../db/api')
var logger = require('../../../util/logger')
var datautil = require('../../../util/datautil')
var log = logger.createLogger('api:controllers:device')
var wire = require('../../../wire')
var wireutil = require('../../../wire/util')
module.exports = {
getDevices: getDevices
, getDeviceBySerial: getDeviceBySerial
, reserveDeviceBySerial: reserveDeviceBySerial
, releaseDeviceBySerial: releaseDeviceBySerial
}
var log = logger.createLogger('api:contoller:device')
@@ -42,11 +39,17 @@ function getDevices(req, res) {
function getDeviceBySerial(req, res) {
var serial = req.swagger.params.serial.value
var fields = req.swagger.params.fields.value
dbapi.loadDevice(serial)
.then(function(device) {
if (device) {
datautil.normalize(device, req.user)
if(fields) {
device = _.pick(device, fields.split(','))
}
res.json({
success: true
, device: device
@@ -65,99 +68,3 @@ function getDeviceBySerial(req, res) {
})
})
}
function reserveDeviceBySerial(req, res) {
var serial = req.swagger.params.serial.value
dbapi.loadDevice(serial)
.then(function(device) {
if (device) {
datautil.normalize(device, req.user)
if(!device.using) {
var requirements = {
'serial': {
'value': serial,
'match': 'exact'
}
}
req.options.push.send([
device.channel
, wireutil.envelope(
new wire.GroupMessage(
new wire.OwnerMessage(
req.user.email
, req.user.name
, req.user.group
)
, null
, wireutil.toDeviceRequirements(requirements)
)
)
])
res.json({
success: true
, device: device
})
} else {
res.json(500, {
success: false
, description: 'Device is being used'
})
}
} else {
res.json(500, {
success: false
, description: 'Bad device serial'
})
}
})
}
function releaseDeviceBySerial(req, res) {
var serial = req.swagger.params.serial.value
dbapi.loadDevice(serial)
.then(function(device) {
if (device) {
datautil.normalize(device, req.user)
if(device.using && device.owner.email == req.user.email) {
var requirements = {
'serial': {
'value': serial,
'match': 'exact'
}
}
req.options.push.send([
device.channel
, wireutil.envelope(
new wire.UngroupMessage(
wireutil.toDeviceRequirements(requirements)
)
)
])
res.json({
success: true
, device: device
})
} else {
res.json(500, {
success: false
, description: 'You cannot kick this device'
})
}
} else {
res.json(500, {
success: false
, description: 'Bad device serial'
})
}
})
}

View File

@@ -3,12 +3,16 @@ var Promise = require('bluebird')
var dbapi = require('../../../db/api')
var logger = require('../../../util/logger')
var datautil = require('../../../util/datautil')
var wire = require('../../../wire')
var wireutil = require('../../../wire/util')
var log = logger.createLogger('api:controllers:user')
module.exports = {
getCurrentUser: getCurrentUser
, getCurrentUserGroup: getCurrentUserGroup
, getCurrentUserDevices: getCurrentUserDevices
, addDeviceToUser: addDeviceToUser
, deleteDeviceFromUser: deleteDeviceFromUser
}
function getCurrentUser(req, res) {
@@ -18,8 +22,8 @@ function getCurrentUser(req, res) {
})
}
function getCurrentUserGroup(req, res) {
dbapi.loadGroup(req.user.email)
function getCurrentUserDevices(req, res) {
dbapi.loadUserDevices(req.user.email)
.then(function(cursor) {
return Promise.promisify(cursor.toArray, cursor)()
.then(function(list) {
@@ -39,3 +43,100 @@ function getCurrentUserGroup(req, res) {
})
})
}
function addDeviceToUser(req, res) {
var serial = req.body.serial
var timeout = req.body.timeout || null
dbapi.loadDevice(serial)
.then(function(device) {
if (device) {
datautil.normalize(device, req.user)
if(device.ready && !device.using) {
var requirements = {
'serial': {
'value': serial,
'match': 'exact'
}
}
req.options.push.send([
device.channel
, wireutil.envelope(
new wire.GroupMessage(
new wire.OwnerMessage(
req.user.email
, req.user.name
, req.user.group
)
, timeout
, wireutil.toDeviceRequirements(requirements)
)
)
])
res.json(202, {
success: true
, description: 'Device Add request is accepted'
})
} else {
res.json(500, {
success: false
, description: 'Device is being used or not available'
})
}
} else {
res.json(500, {
success: false
, description: 'Bad device serial'
})
}
})
}
function deleteDeviceFromUser(req, res) {
var serial = req.body.serial
dbapi.loadDevice(serial)
.then(function(device) {
if (device) {
datautil.normalize(device, req.user)
if(device.using && device.owner.email == req.user.email) {
var requirements = {
'serial': {
'value': serial,
'match': 'exact'
}
}
req.options.push.send([
device.channel
, wireutil.envelope(
new wire.UngroupMessage(
wireutil.toDeviceRequirements(requirements)
)
)
])
res.json(202, {
success: true
, description: 'Device Release request is accepted'
})
} else {
res.json(500, {
success: false
, description: 'You cannot kick this device'
})
}
} else {
res.json(500, {
success: false
, description: 'Bad device serial'
})
}
})
}