group.js 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. const graphHelper = require('../../helpers/graph')
  2. /* global WIKI */
  3. const gql = require('graphql')
  4. module.exports = {
  5. Query: {
  6. async groups() { return {} }
  7. },
  8. Mutation: {
  9. async groups() { return {} }
  10. },
  11. GroupQuery: {
  12. async list(obj, args, context, info) {
  13. return WIKI.models.groups.query().select(
  14. 'groups.*',
  15. WIKI.models.groups.relatedQuery('users').count().as('userCount')
  16. )
  17. },
  18. async single(obj, args, context, info) {
  19. return WIKI.models.groups.query().findById(args.id)
  20. }
  21. },
  22. GroupMutation: {
  23. async assignUser(obj, args) {
  24. const grp = await WIKI.models.groups.query().findById(args.groupId)
  25. if (!grp) {
  26. throw new gql.GraphQLError('Invalid Group ID')
  27. }
  28. const usr = await WIKI.models.users.query().findById(args.userId)
  29. if (!usr) {
  30. throw new gql.GraphQLError('Invalid User ID')
  31. }
  32. await grp.$relatedQuery('users').relate(usr.id)
  33. return {
  34. responseResult: graphHelper.generateSuccess('User has been assigned to group.')
  35. }
  36. },
  37. async create(obj, args) {
  38. const group = await WIKI.models.groups.query().insertAndFetch({
  39. name: args.name,
  40. permissions: JSON.stringify(WIKI.data.groups.defaultPermissions),
  41. pageRules: JSON.stringify([]),
  42. isSystem: false
  43. })
  44. return {
  45. responseResult: graphHelper.generateSuccess('Group created successfully.'),
  46. group
  47. }
  48. },
  49. async delete(obj, args) {
  50. await WIKI.models.groups.query().deleteById(args.id)
  51. return {
  52. responseResult: graphHelper.generateSuccess('Group has been deleted.')
  53. }
  54. },
  55. async unassignUser(obj, args) {
  56. const grp = await WIKI.models.groups.query().findById(args.groupId)
  57. if (!grp) {
  58. throw new gql.GraphQLError('Invalid Group ID')
  59. }
  60. const usr = await WIKI.models.users.query().findById(args.userId)
  61. if (!usr) {
  62. throw new gql.GraphQLError('Invalid User ID')
  63. }
  64. await grp.$relatedQuery('users').unrelate().where('userId', usr.id)
  65. return {
  66. responseResult: graphHelper.generateSuccess('User has been unassigned from group.')
  67. }
  68. },
  69. async update(obj, args) {
  70. await WIKI.models.groups.query().patch({
  71. name: args.name,
  72. permissions: JSON.stringify(args.permissions),
  73. pageRules: JSON.stringify(args.pageRules)
  74. }).where('id', args.id)
  75. return {
  76. responseResult: graphHelper.generateSuccess('Group has been updated.')
  77. }
  78. }
  79. },
  80. Group: {
  81. users(grp) {
  82. return grp.$relatedQuery('users')
  83. }
  84. }
  85. }