page.js 3.7 KB

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