修改 /ticket/update 中表示成员的方式 in #50

This commit is contained in:
jysperm
2014-05-02 17:07:57 +08:00
parent 2ec508fc57
commit a7be0b98f2
5 changed files with 68 additions and 44 deletions

View File

@@ -63,10 +63,12 @@ Request:
"public": true
},
"members": {
// add a user
"525284cc2cebb6d0008b4567": true,
// remove a user
"4cc2cebb6d5254567280008b": false
"add": [
"525284cc2cebb6d0008b4567"
],
"remove": [
"4cc2cebb6d5254567280008b"
]
}
}

View File

@@ -1,5 +1,7 @@
## 用户系统
在 API 中所有需要指明一个用户的参数都可以使用「用户名」「邮件地址」「ID」任意之一。
### 用户组
* root - 全站最高管理员

View File

@@ -13,7 +13,7 @@ module.exports =
post:
signup: (req, res) ->
unless /^[0-9a-z_]+$/.test req.body.username
unless /^[0-9a-z_]{3,23}$/.test req.body.username
return res.json 400, error: 'invalid_username'
unless /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/.test req.body.email
@@ -39,7 +39,7 @@ module.exports =
id: account._id
login: (req, res) ->
mAccount.byUsernameOrEmail req.body.username, (account) ->
mAccount.byUsernameOrEmailOrId req.body.username, (account) ->
unless account
return res.json 400, error: 'auth_failed'

View File

@@ -71,7 +71,7 @@ module.exports =
for memberName in req.body.members
do (memberName = _.clone(memberName)) ->
tasks.push (callback) ->
mAccount.byUsernameOrEmail memberName, (member) ->
mAccount.byUsernameOrEmailOrId memberName, (member) ->
unless member
res.json 400, error: 'invalid_account', username: memberName
callback true
@@ -170,6 +170,37 @@ module.exports =
else
return res.json 400, error: 'invalid_status'
saveToDatabase = ->
async.parallel [
(callback) ->
unless _.isEmpty modifier
mTicket.update _id: ticket._id,
$set: modifier
, {}, callback
else
callback()
(callback) ->
unless _.isEmpty addToSetModifier
mTicket.update _id: ticket._id,
$addToSet:
members:
$each: addToSetModifier
, {}, callback
else
callback()
(callback) ->
unless _.isEmpty pullModifier
mTicket.update _id: ticket._id,
$pullAll:
members: pullModifier
, {}, callback
else
callback()
], ->
return res.json {}
if mAccount.inGroup account, 'root'
if req.body.attribute
if req.body.attribute.public
@@ -178,42 +209,27 @@ module.exports =
modifier['attribute.public'] = false
if req.body.members
for member_id, op of req.body.members
member_id = db.ObjectID member_id
tasks = {}
if mTicket.getMember ticket, {_id: member_id}
unless op
pullModifier.push member_id
else
if op
addToSetModifier.push member_id
member_name = _.filter _.union(req.body.members.add, req.body.members.remove), (item) -> item
for item in member_name
tasks[item] = do (item = _.clone(item)) ->
return (callback) ->
mAccount.byUsernameOrEmailOrId item, (result) ->
callback null, result
async.parallel [
(callback) ->
unless _.isEmpty modifier
mTicket.update _id: ticket._id,
$set: modifier
, {}, callback
else
callback()
async.parallel tasks, (err, result) ->
console.log result
(callback) ->
unless _.isEmpty addToSetModifier
mTicket.update _id: ticket._id,
$addToSet:
members:
$each: addToSetModifier
, {}, callback
else
callback()
if req.body.members.add
for item in req.body.members.add
addToSetModifier.push result[item]._id
(callback) ->
unless _.isEmpty pullModifier
mTicket.update _id: ticket._id,
$pullAll:
members: pullModifier
, {}, callback
else
callback()
], ->
return res.json {}
if req.body.members.remove
for item in req.body.members.remove
pullModifier.push result[item]._id
saveToDatabase()
else
saveToDatabase()

View File

@@ -79,12 +79,16 @@ exports.authenticate = (token, callback) ->
'tokens.token': token
, {}, callback
exports.byUsernameOrEmail = (username, callback) ->
exports.byUsernameOrEmailOrId = (username, callback) ->
exports.byUsername username, (account) ->
if account
return callback account
exports.byEmail username, callback
exports.byEmail username, (account) ->
if account
return callback account
exports.findId username, callback
# @return bool
exports.matchPasswd = (account, passwd) ->