Browse Source

feat: GraphQL mutations for User + Group

NGPixel 7 years ago
parent
commit
7e1cb3d171

+ 5 - 8
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,

+ 10 - 3
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()
     }

+ 10 - 3
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()
     }

+ 32 - 3
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
+}

+ 1 - 1
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' }
       })