mirror of
https://github.com/HackPlan/RootPanel.git
synced 2026-01-13 07:01:20 +08:00
finish ticket/create, non-test
This commit is contained in:
@@ -21,6 +21,12 @@ Response:
|
||||
"id": "525284cc2cebb6d0008b4567"
|
||||
}
|
||||
|
||||
Exception:
|
||||
|
||||
* invalid_title `/^.+$/`
|
||||
* invalid_type
|
||||
* invalid_account: username
|
||||
|
||||
### POST /ticket/reply
|
||||
|
||||
Request:
|
||||
|
||||
@@ -9,6 +9,11 @@ module.exports =
|
||||
defaultLanguage: 'zh_CN'
|
||||
availableLanguage: ['zh_CN']
|
||||
|
||||
ticket:
|
||||
availableType: [
|
||||
'linux', 'nodejs', 'php', 'python', 'rootpanel'
|
||||
]
|
||||
|
||||
db:
|
||||
type: 'mongo'
|
||||
server: 'localhost'
|
||||
|
||||
@@ -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
59
core/router/ticket.coffee
Normal 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) ->
|
||||
@@ -20,9 +20,12 @@
|
||||
"dependencies": {
|
||||
"express": "*",
|
||||
"jade": "*",
|
||||
"less": "*",
|
||||
"i18next": "*",
|
||||
"coffee-script": "*",
|
||||
"mongodb": "*",
|
||||
"underscore": "*"
|
||||
"underscore": "*",
|
||||
"markdown": "*",
|
||||
"clone": "*"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user