mirror of
https://github.com/HackPlan/RootPanel.git
synced 2026-01-12 22:27:09 +08:00
修改 /ticket/update 中表示成员的方式 in #50
This commit is contained in:
@@ -63,10 +63,12 @@ Request:
|
||||
"public": true
|
||||
},
|
||||
"members": {
|
||||
// add a user
|
||||
"525284cc2cebb6d0008b4567": true,
|
||||
// remove a user
|
||||
"4cc2cebb6d5254567280008b": false
|
||||
"add": [
|
||||
"525284cc2cebb6d0008b4567"
|
||||
],
|
||||
"remove": [
|
||||
"4cc2cebb6d5254567280008b"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
## 用户系统
|
||||
|
||||
在 API 中,所有需要指明一个用户的参数,都可以使用「用户名」,「邮件地址」,「ID」任意之一。
|
||||
|
||||
### 用户组
|
||||
|
||||
* root - 全站最高管理员
|
||||
|
||||
@@ -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'
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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) ->
|
||||
|
||||
Reference in New Issue
Block a user