2016-11-26 11:17:01 +09:00
/ *
Define the three default mutations :
- new ( e . g . : moviesNew ( document : moviesInput ) : Movie )
- edit ( e . g . : moviesEdit ( documentId : String , set : moviesInput , unset : moviesUnset ) : Movie )
- remove ( e . g . : moviesRemove ( documentId : String ) : Movie )
Each mutation has :
- A name
- A check function that takes the current user and ( optionally ) the document affected
- The actual mutation
* /
2017-02-02 15:15:51 +01:00
import { newMutation , editMutation , removeMutation , Utils } from 'meteor/nova:core' ;
2016-11-22 18:14:51 -05:00
import Users from 'meteor/nova:users' ;
2016-11-18 16:01:27 +09:00
2016-11-21 19:23:43 +09:00
const performCheck = ( mutation , user , document ) => {
2017-02-02 15:15:51 +01:00
if ( ! mutation . check ( user , document ) ) throw new Error ( Utils . encodeIntlError ( { id : ` app.mutation_not_allowed ` , value : ` " ${ mutation . name } " on _id " ${ document . _id } " ` } ) ) ;
2016-11-21 19:23:43 +09:00
}
2016-11-21 16:18:08 +09:00
const mutations = {
2016-11-18 16:01:27 +09:00
2016-11-21 19:23:43 +09:00
new : {
name : 'moviesNew' ,
2016-11-26 11:17:01 +09:00
check ( user ) {
2016-11-21 19:23:43 +09:00
if ( ! user ) return false ;
return Users . canDo ( user , 'movies.new' ) ;
} ,
mutation ( root , { document } , context ) {
performCheck ( this , context . currentUser , document ) ;
return newMutation ( {
collection : context . Movies ,
document : document ,
currentUser : context . currentUser ,
2016-11-24 15:47:51 +09:00
validate : true ,
context ,
2016-11-21 19:23:43 +09:00
} ) ;
} ,
2016-11-18 16:01:27 +09:00
} ,
2016-11-21 19:23:43 +09:00
edit : {
name : 'moviesEdit' ,
check ( user , document ) {
if ( ! user || ! document ) return false ;
return Users . owns ( user , document ) ? Users . canDo ( user , 'movies.edit.own' ) : Users . canDo ( user , ` movies.edit.all ` ) ;
} ,
2016-11-18 16:01:27 +09:00
2016-11-21 19:23:43 +09:00
mutation ( root , { documentId , set , unset } , context ) {
const document = context . Movies . findOne ( documentId ) ;
performCheck ( this , context . currentUser , document ) ;
return editMutation ( {
collection : context . Movies ,
documentId : documentId ,
set : set ,
unset : unset ,
currentUser : context . currentUser ,
2016-11-24 15:47:51 +09:00
validate : true ,
context ,
2016-11-21 19:23:43 +09:00
} ) ;
} ,
2016-11-18 16:01:27 +09:00
} ,
2016-11-21 19:23:43 +09:00
remove : {
name : 'moviesRemove' ,
check ( user , document ) {
if ( ! user || ! document ) return false ;
return Users . owns ( user , document ) ? Users . canDo ( user , 'movies.remove.own' ) : Users . canDo ( user , ` movies.remove.all ` ) ;
} ,
mutation ( root , { documentId } , context ) {
2016-11-18 16:01:27 +09:00
2016-11-21 19:23:43 +09:00
const document = context . Movies . findOne ( documentId ) ;
performCheck ( this , context . currentUser , document ) ;
2016-11-18 16:01:27 +09:00
2016-11-21 19:23:43 +09:00
return removeMutation ( {
collection : context . Movies ,
documentId : documentId ,
currentUser : context . currentUser ,
2016-11-24 15:47:51 +09:00
validate : true ,
context ,
2016-11-21 19:23:43 +09:00
} ) ;
} ,
2016-11-18 16:01:27 +09:00
} ,
} ;
2016-11-21 16:18:08 +09:00
export default mutations ;