buckets
Version:
Manage content better.
118 lines (108 loc) • 2.31 kB
text/coffeescript
inflection = require 'inflection'
mongoose = require 'mongoose'
uniqueValidator = require 'mongoose-unique-validator'
Route = require '../models/route'
db = require '../lib/database'
{Sortable} = require '../lib/mongoose-plugins'
fieldSchema = new mongoose.Schema
name:
type: String
unique: no
required: yes
slug:
type: String
index: yes
required: yes
required: Boolean
instructions: String
fieldType:
type: String
required: yes
settings: {}
fieldSchema
.path 'slug'
.validate (val) ->
val not in [
'title'
'description'
'slug'
'status'
'lastModified'
'publishDate'
'createdAt'
'author'
'bucket'
'keywords'
'content'
]
, 'Sorry, that’s a reserved field slug.'
bucketSchema = new mongoose.Schema
name:
type: String
unique: yes
required: yes
slug:
type: String
unique: yes
required: yes
titleLabel:
type: String
default: 'Title'
titlePlaceholder:
type: String
singular:
type: String
required: yes
icon:
type: String
enum: [
'edit'
'camera-front'
'calendar'
'video-camera'
'headphone'
'map'
'quote'
'shopping-bag'
'cocktail'
'globe'
'call'
'goal'
'megaphone'
'star'
'chat-bubble'
'bookmark'
'toolbox'
'person'
]
default: 'edit'
required: yes
color:
type: String
enum: ['teal', 'purple', 'red', 'yellow', 'blue', 'orange', 'green', 'gray']
default: 'teal'
required: yes
fields: [fieldSchema]
,
toJSON:
virtuals: yes
transform: (doc, ret, options) ->
delete ret._id
delete ret.__v
ret
bucketSchema.pre 'validate', (next) ->
# Auto add singular if not provided
@singular ?= inflection.singularize @name if @name
next()
bucketSchema.plugin uniqueValidator, message: '“{VALUE}” is already taken.'
bucketSchema.plugin Sortable
bucketSchema.plugin Sortable, embedded: 'fields'
bucketSchema.post 'remove', ->
@model('Entry').remove(bucket: @_id).exec()
bucketSchema.methods.getMembers = (callback) ->
@model('User').find
roles:
$elemMatch:
resourceId: @_id
, callback
module.exports = db.model 'Bucket', bucketSchema