finish ticket/create, non-test

This commit is contained in:
jysperm
2014-03-15 22:24:08 +08:00
parent 85b54b5731
commit ccdc703e75
5 changed files with 96 additions and 1 deletions

View File

@@ -21,6 +21,12 @@ Response:
"id": "525284cc2cebb6d0008b4567"
}
Exception:
* invalid_title `/^.+$/`
* invalid_type
* invalid_account: username
### POST /ticket/reply
Request:

View File

@@ -9,6 +9,11 @@ module.exports =
defaultLanguage: 'zh_CN'
availableLanguage: ['zh_CN']
ticket:
availableType: [
'linux', 'nodejs', 'php', 'python', 'rootpanel'
]
db:
type: 'mongo'
server: 'localhost'

View File

@@ -1,5 +1,27 @@
markdown = require('markdown').markdown
Model = require './Model'
module.exports = class Ticket extends Model
@create: (data) ->
new Ticket data
@createTicket: (account, title, content, type, members, attribute, callback) ->
membersID = []
for member in members
membersID.push member.id()
@insert
account_id: account.id()
created_at: new Date()
updated_at: new Date()
title: title
content: content
content_html: markdown.toHTML content
type: type
status: 'open'
members: membersID
attribute: attribute
replys: []
, (ticket) ->
callback ticket

59
core/router/ticket.coffee Normal file
View File

@@ -0,0 +1,59 @@
async = require 'async'
clone = require 'clone'
config = require '../config'
Account = require '../model/Account'
Ticket = require '../model/Ticket'
module.exports =
get: {}
post:
create: (req, res) ->
Account.authenticate req.token, (account) ->
unless account
return res.json 400, error: 'auth_failed'
data = req.body
unless /^.+$/.test data.title
return res.json 400, error: 'invalid_title'
unless data.type in config.ticket.availableType
return res.json 400, error: 'invalid_type'
createTicket = (members) ->
Ticket.createTicket account, title, content, type, members, {}, (ticket) ->
return res.json
id: ticket.id()
if account.inGroup('root')
tasks = []
if data.members
for memberName in data.members
do (memberName = clone(memberName)) ->
tasks.push (callback) ->
Account.byUsernameOrEmail memberName, (member) ->
unless member
res.json 400, error: 'invalid_account', username: memberName
callback true
callback null, member
async.parallel tasks, (err, result) ->
if err
return
unless _.find(result, (item) -> item.id() == account.id())
result.push account
createTicket result
else
createTicket [account]
reply: (req, res) ->
update: (req, res) ->

View File

@@ -20,9 +20,12 @@
"dependencies": {
"express": "*",
"jade": "*",
"less": "*",
"i18next": "*",
"coffee-script": "*",
"mongodb": "*",
"underscore": "*"
"underscore": "*",
"markdown": "*",
"clone": "*"
}
}