You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

177 lines
4.9 KiB

6 years ago
6 years ago
6 years ago
6 years ago
  1. const _ = require('lodash')
  2. const graphHelper = require('../../helpers/graph')
  3. /* global WIKI */
  4. module.exports = {
  5. Query: {
  6. async pages() { return {} }
  7. },
  8. Mutation: {
  9. async pages() { return {} }
  10. },
  11. PageQuery: {
  12. async history(obj, args, context, info) {
  13. return WIKI.models.pageHistory.getHistory({
  14. pageId: args.id,
  15. offsetPage: args.offsetPage || 0,
  16. offsetSize: args.offsetSize || 100
  17. })
  18. },
  19. async search (obj, args, context) {
  20. if (WIKI.data.searchEngine) {
  21. const resp = await WIKI.data.searchEngine.query(args.query, args)
  22. return {
  23. ...resp,
  24. results: _.filter(resp.results, r => {
  25. return WIKI.auth.checkAccess(context.req.user, ['read:pages'], {
  26. path: r.path,
  27. locale: r.locale
  28. })
  29. })
  30. }
  31. } else {
  32. return {
  33. results: [],
  34. suggestions: [],
  35. totalHits: 0
  36. }
  37. }
  38. },
  39. async list (obj, args, context, info) {
  40. let results = await WIKI.models.pages.query().column([
  41. 'pages.id',
  42. 'path',
  43. { locale: 'localeCode' },
  44. 'title',
  45. 'description',
  46. 'isPublished',
  47. 'isPrivate',
  48. 'privateNS',
  49. 'contentType',
  50. 'createdAt',
  51. 'updatedAt'
  52. ])
  53. .eagerAlgorithm(WIKI.models.Objection.Model.JoinEagerAlgorithm)
  54. .eager('tags(selectTags)', {
  55. selectTags: builder => {
  56. builder.select('tag')
  57. }
  58. })
  59. .modify(queryBuilder => {
  60. if (args.limit) {
  61. queryBuilder.limit(args.limit)
  62. }
  63. if (args.locale) {
  64. queryBuilder.where('localeCode', args.locale)
  65. }
  66. if (args.tags && args.tags.length > 0) {
  67. queryBuilder.whereIn('tags.tag', args.tags)
  68. }
  69. const orderDir = args.orderByDirection === 'DESC' ? 'desc' : 'asc'
  70. switch (args.orderBy) {
  71. case 'CREATED':
  72. queryBuilder.orderBy('createdAt', orderDir)
  73. break
  74. case 'PATH':
  75. queryBuilder.orderBy('path', orderDir)
  76. break
  77. case 'TITLE':
  78. queryBuilder.orderBy('title', orderDir)
  79. break
  80. case 'UPDATED':
  81. queryBuilder.orderBy('updatedAt', orderDir)
  82. break
  83. default:
  84. queryBuilder.orderBy('pages.id', orderDir)
  85. break
  86. }
  87. })
  88. results = _.filter(results, r => {
  89. return WIKI.auth.checkAccess(context.req.user, ['read:pages'], {
  90. path: r.path,
  91. locale: r.locale
  92. })
  93. }).map(r => ({
  94. ...r,
  95. tags: _.map(r.tags, 'tag')
  96. }))
  97. if (args.tags && args.tags.length > 0) {
  98. results = _.filter(results, r => _.every(args.tags, t => _.includes(r.tags, t)))
  99. }
  100. return results
  101. },
  102. async single (obj, args, context, info) {
  103. let page = await WIKI.models.pages.getPageFromDb(args.id)
  104. if (page) {
  105. return {
  106. ...page,
  107. locale: page.localeCode,
  108. editor: page.editorKey
  109. }
  110. } else {
  111. throw new WIKI.Error.PageNotFound()
  112. }
  113. },
  114. async tags (obj, args, context, info) {
  115. return WIKI.models.tags.query().orderBy('tag', 'asc')
  116. }
  117. },
  118. PageMutation: {
  119. async create(obj, args, context) {
  120. const page = await WIKI.models.pages.createPage({
  121. ...args,
  122. authorId: context.req.user.id
  123. })
  124. return {
  125. responseResult: graphHelper.generateSuccess('Page created successfully.'),
  126. page
  127. }
  128. },
  129. async delete(obj, args, context) {
  130. await WIKI.models.pages.deletePage({
  131. ...args,
  132. authorId: context.req.user.id
  133. })
  134. return {
  135. responseResult: graphHelper.generateSuccess('Page has been deleted.')
  136. }
  137. },
  138. async update(obj, args, context) {
  139. const page = await WIKI.models.pages.updatePage({
  140. ...args,
  141. authorId: context.req.user.id
  142. })
  143. return {
  144. responseResult: graphHelper.generateSuccess('Page has been updated.'),
  145. page
  146. }
  147. },
  148. async flushCache(obj, args, context) {
  149. try {
  150. await WIKI.models.pages.flushCache()
  151. return {
  152. responseResult: graphHelper.generateSuccess('Pages Cache has been flushed successfully.')
  153. }
  154. } catch (err) {
  155. return graphHelper.generateError(err)
  156. }
  157. },
  158. async migrateToLocale(obj, args, context) {
  159. try {
  160. const count = await WIKI.models.pages.migrateToLocale(args)
  161. return {
  162. responseResult: graphHelper.generateSuccess('Migrated content to target locale successfully.'),
  163. count
  164. }
  165. } catch (err) {
  166. return graphHelper.generateError(err)
  167. }
  168. }
  169. },
  170. Page: {
  171. // comments(pg) {
  172. // return pg.$relatedQuery('comments')
  173. // }
  174. }
  175. }