diff --git a/server/modules/graphql.js b/server/modules/graphql.js index d40b6d04..ed6f776c 100644 --- a/server/modules/graphql.js +++ b/server/modules/graphql.js @@ -5,20 +5,17 @@ const gqlTools = require('graphql-tools') const fs = require('fs') const path = require('path') +const _ = require('lodash') const typeDefs = fs.readFileSync(path.join(wiki.SERVERPATH, 'schemas/types.graphql'), 'utf8') const GroupResolvers = require('../schemas/resolvers-group') const UserResolvers = require('../schemas/resolvers-user') -const resolvers = { - Query: { - groups: GroupResolvers.Query, - users: UserResolvers.Query - }, - Group: GroupResolvers.Type, - User: UserResolvers.Type -} +const resolvers = _.merge( + GroupResolvers, + UserResolvers +) const Schema = gqlTools.makeExecutableSchema({ typeDefs, diff --git a/server/schemas/resolvers-group.js b/server/schemas/resolvers-group.js index bde68195..14f5296c 100644 --- a/server/schemas/resolvers-group.js +++ b/server/schemas/resolvers-group.js @@ -3,10 +3,17 @@ /* global wiki */ module.exports = { - Query(obj, args, context, info) { - return wiki.db.Group.findAll({ where: args }) + Query: { + groups(obj, args, context, info) { + return wiki.db.Group.findAll({ where: args }) + } + }, + Mutation: { + createGroup(obj, args) { + return wiki.db.Group.create(args) + } }, - Type: { + Group: { users(grp) { return grp.getUsers() } diff --git a/server/schemas/resolvers-user.js b/server/schemas/resolvers-user.js index d7a876fd..7bd6278c 100644 --- a/server/schemas/resolvers-user.js +++ b/server/schemas/resolvers-user.js @@ -3,10 +3,17 @@ /* global wiki */ module.exports = { - Query(obj, args, context, info) { - return wiki.db.User.findAll({ where: args }) + Query: { + users(obj, args, context, info) { + return wiki.db.User.findAll({ where: args }) + } + }, + Mutation: { + createUser(obj, args) { + return wiki.db.User.create(args) + } }, - Type: { + User: { groups(usr) { return usr.getGroups() } diff --git a/server/schemas/types.graphql b/server/schemas/types.graphql index 90722ddc..a7e6e20d 100644 --- a/server/schemas/types.graphql +++ b/server/schemas/types.graphql @@ -102,6 +102,7 @@ type Setting implements Base { config: String! } +# Tags are attached to one or more documents type Tag implements Base { id: Int! createdOn: Date @@ -109,20 +110,20 @@ type Tag implements Base { key: String! } +# A User type User implements Base { id: Int! createdOn: Date updatedOn: Date email: String! - provider: String + provider: String! providerId: String name: String role: UserRole! groups: [Group] } -# QUERY - +# Query (Read) type Query { comments(id: Int): [Comment] documents(id: Int, path: String): [Document] @@ -134,3 +135,31 @@ type Query { tags(key: String): [Tag] users(id: Int, email: String, provider: String, providerId: String, role: UserRole): [User] } + +# Mutations (Create, Update, Delete) +type Mutation { + assignUserToGroup( + userId: Int! + groupId: Int! + ): Boolean + createGroup( + name: String! + ): Group + createUser( + email: String! + name: String + provider: String! + providerId: String + role: UserRole! + ): User + deleteGroup( + id: Int! + ): Boolean + deleteUser( + id: Int! + ): Boolean + removeUserFromGroup( + userId: Int! + groupId: Int! + ): Boolean +} diff --git a/tools/fuse.js b/tools/fuse.js index 719bf6ef..9fc79274 100644 --- a/tools/fuse.js +++ b/tools/fuse.js @@ -140,7 +140,7 @@ globalTasks.then(() => { nodemon({ exec: (args.d) ? 'node server' : 'node wiki configure', ignore: ['assets/', 'client/', 'data/', 'repo/', 'tests/'], - ext: 'js json', + ext: 'js json graphql', watch: (args.d) ? ['server'] : ['server/configure.js'], env: { 'NODE_ENV': 'development' } })