2014-07-01 10:16:26 +08:00
LevelComponent = require ' ./LevelComponent '
Handler = require ' ../../commons/Handler '
2014-11-01 14:15:57 -07:00
mongoose = require ' mongoose '
2014-01-03 10:32:13 -08:00
LevelComponentHandler = class LevelComponentHandler extends Handler
modelClass: LevelComponent
2014-04-12 10:51:02 -07:00
jsonSchema: require ' ../../../app/schemas/models/level_component '
2014-01-03 10:32:13 -08:00
editableProperties: [
' system '
' description '
' code '
' js '
2014-06-09 12:26:47 +02:00
' codeLanguage '
2014-01-03 10:32:13 -08:00
' dependencies '
' propertyDocumentation '
' configSchema '
2014-02-05 11:03:32 -08:00
' name '
2014-10-27 17:11:48 -07:00
' i18nCoverage '
2014-01-03 10:32:13 -08:00
]
getEditableProperties: (req, document) ->
props = super ( req , document )
props . push ( ' official ' ) if req . user ? . isAdmin ( )
props
2014-11-01 14:15:57 -07:00
get: (req, res) ->
if req . query . view is ' prop-doc-lookup '
projection = { }
if req . query . project
projection [ field ] = 1 for field in req . query . project . split ( ' , ' )
query = slug: { $exists: true }
try
components = req . query . componentOriginals . split ( ' , ' )
components = ( mongoose . Types . ObjectId ( c ) for c in components )
properties = req . query . propertyNames . split ( ' , ' )
catch e
return @ sendBadInputError ( res , ' Could not parse componentOriginals or propertyNames. ' )
2014-11-12 11:01:52 -08:00
2014-11-01 14:15:57 -07:00
query [ ' original ' ] = { $in: components }
2014-11-12 11:01:52 -08:00
query.$or = [
{ ' propertyDocumentation.name ' : { $in: properties } }
{ ' propertyDocumentation.name ' : { $regex: /^cast.+/ } }
]
2014-11-01 14:15:57 -07:00
q = LevelComponent . find ( query , projection )
q . exec (err, documents) =>
return @ sendDatabaseError ( res , err ) if err
documents = ( @ formatEntity ( req , doc ) for doc in documents )
@ sendSuccess ( res , documents )
else
super ( arguments . . . )
2014-06-09 12:26:47 +02:00
module.exports = new LevelComponentHandler ( )