| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 | 
							- const _ = require('lodash')
 
- const graphHelper = require('../../helpers/graph')
 
- /* global WIKI */
 
- module.exports = {
 
-   Query: {
 
-     async pages() { return {} }
 
-   },
 
-   Mutation: {
 
-     async pages() { return {} }
 
-   },
 
-   PageQuery: {
 
-     async history(obj, args, context, info) {
 
-       return WIKI.models.pageHistory.getHistory({
 
-         pageId: args.id,
 
-         offsetPage: args.offsetPage || 0,
 
-         offsetSize: args.offsetSize || 100
 
-       })
 
-     },
 
-     async search (obj, args, context) {
 
-       if (WIKI.data.searchEngine) {
 
-         const resp = await WIKI.data.searchEngine.query(args.query, args)
 
-         return {
 
-           ...resp,
 
-           results: _.filter(resp.results, r => {
 
-             return WIKI.auth.checkAccess(context.req.user, ['read:pages'], {
 
-               path: r.path,
 
-               locale: r.locale
 
-             })
 
-           })
 
-         }
 
-       } else {
 
-         return {
 
-           results: [],
 
-           suggestions: [],
 
-           totalHits: 0
 
-         }
 
-       }
 
-     },
 
-     async list (obj, args, context, info) {
 
-       let results = await WIKI.models.pages.query().column([
 
-         'pages.id',
 
-         'path',
 
-         { locale: 'localeCode' },
 
-         'title',
 
-         'description',
 
-         'isPublished',
 
-         'isPrivate',
 
-         'privateNS',
 
-         'contentType',
 
-         'createdAt',
 
-         'updatedAt'
 
-       ])
 
-         .eagerAlgorithm(WIKI.models.Objection.Model.JoinEagerAlgorithm)
 
-         .eager('tags(selectTags)', {
 
-           selectTags: builder => {
 
-             builder.select('tag')
 
-           }
 
-         })
 
-         .modify(queryBuilder => {
 
-           if (args.limit) {
 
-             queryBuilder.limit(args.limit)
 
-           }
 
-           if (args.locale) {
 
-             queryBuilder.where('localeCode', args.locale)
 
-           }
 
-           if (args.tags && args.tags.length > 0) {
 
-             queryBuilder.whereIn('tags.tag', args.tags)
 
-           }
 
-           const orderDir = args.orderByDirection === 'DESC' ? 'desc' : 'asc'
 
-           switch (args.orderBy) {
 
-             case 'CREATED':
 
-               queryBuilder.orderBy('createdAt', orderDir)
 
-               break
 
-             case 'PATH':
 
-               queryBuilder.orderBy('path', orderDir)
 
-               break
 
-             case 'TITLE':
 
-               queryBuilder.orderBy('title', orderDir)
 
-               break
 
-             case 'UPDATED':
 
-               queryBuilder.orderBy('updatedAt', orderDir)
 
-               break
 
-             default:
 
-               queryBuilder.orderBy('pages.id', orderDir)
 
-               break
 
-           }
 
-         })
 
-       results = _.filter(results, r => {
 
-         return WIKI.auth.checkAccess(context.req.user, ['read:pages'], {
 
-           path: r.path,
 
-           locale: r.locale
 
-         })
 
-       }).map(r => ({
 
-         ...r,
 
-         tags: _.map(r.tags, 'tag')
 
-       }))
 
-       if (args.tags && args.tags.length > 0) {
 
-         results = _.filter(results, r => _.every(args.tags, t => _.includes(r.tags, t)))
 
-       }
 
-       return results
 
-     },
 
-     async single (obj, args, context, info) {
 
-       let page = await WIKI.models.pages.getPageFromDb(args.id)
 
-       if (page) {
 
-         return {
 
-           ...page,
 
-           locale: page.localeCode,
 
-           editor: page.editorKey
 
-         }
 
-       } else {
 
-         throw new WIKI.Error.PageNotFound()
 
-       }
 
-     },
 
-     async tags (obj, args, context, info) {
 
-       return WIKI.models.tags.query().orderBy('tag', 'asc')
 
-     },
 
-     async tree (obj, args, context, info) {
 
-       let results = []
 
-       let conds = {
 
-         localeCode: args.locale,
 
-         parent: (args.parent < 1) ? null : args.parent
 
-       }
 
-       switch (args.mode) {
 
-         case 'FOLDERS':
 
-           conds.isFolder = true
 
-           results = await WIKI.models.knex('pageTree').where(conds)
 
-           break
 
-         case 'PAGES':
 
-           await WIKI.models.knex('pageTree').where(conds).andWhereNotNull('pageId')
 
-           break
 
-         default:
 
-           results = await WIKI.models.knex('pageTree').where(conds)
 
-           break
 
-       }
 
-       return results.filter(r => {
 
-         return WIKI.auth.checkAccess(context.req.user, ['read:pages'], {
 
-           path: r.path,
 
-           locale: r.localeCode
 
-         })
 
-       }).map(r => ({
 
-         ...r,
 
-         parent: r.parent || 0,
 
-         locale: r.localeCode
 
-       }))
 
-     }
 
-   },
 
-   PageMutation: {
 
-     async create(obj, args, context) {
 
-       const page = await WIKI.models.pages.createPage({
 
-         ...args,
 
-         authorId: context.req.user.id
 
-       })
 
-       return {
 
-         responseResult: graphHelper.generateSuccess('Page created successfully.'),
 
-         page
 
-       }
 
-     },
 
-     async delete(obj, args, context) {
 
-       await WIKI.models.pages.deletePage({
 
-         ...args,
 
-         authorId: context.req.user.id
 
-       })
 
-       return {
 
-         responseResult: graphHelper.generateSuccess('Page has been deleted.')
 
-       }
 
-     },
 
-     async update(obj, args, context) {
 
-       const page = await WIKI.models.pages.updatePage({
 
-         ...args,
 
-         authorId: context.req.user.id
 
-       })
 
-       return {
 
-         responseResult: graphHelper.generateSuccess('Page has been updated.'),
 
-         page
 
-       }
 
-     },
 
-     async flushCache(obj, args, context) {
 
-       try {
 
-         await WIKI.models.pages.flushCache()
 
-         return {
 
-           responseResult: graphHelper.generateSuccess('Pages Cache has been flushed successfully.')
 
-         }
 
-       } catch (err) {
 
-         return graphHelper.generateError(err)
 
-       }
 
-     },
 
-     async migrateToLocale(obj, args, context) {
 
-       try {
 
-         const count = await WIKI.models.pages.migrateToLocale(args)
 
-         return {
 
-           responseResult: graphHelper.generateSuccess('Migrated content to target locale successfully.'),
 
-           count
 
-         }
 
-       } catch (err) {
 
-         return graphHelper.generateError(err)
 
-       }
 
-     }
 
-   },
 
-   Page: {
 
-     // comments(pg) {
 
-     //   return pg.$relatedQuery('comments')
 
-     // }
 
-   }
 
- }
 
 
  |