123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280 |
- const _ = require('lodash')
- const graphHelper = require('../../helpers/graph')
- /* global WIKI */
- module.exports = {
- Query: {
- async pages() { return {} }
- },
- Mutation: {
- async pages() { return {} }
- },
- PageQuery: {
- /**
- * PAGE HISTORY
- */
- async history(obj, args, context, info) {
- return WIKI.models.pageHistory.getHistory({
- pageId: args.id,
- offsetPage: args.offsetPage || 0,
- offsetSize: args.offsetSize || 100
- })
- },
- /**
- * SEARCH PAGES
- */
- 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
- }
- }
- },
- /**
- * LIST PAGES
- */
- 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
- },
- /**
- * FETCH SINGLE PAGE
- */
- 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()
- }
- },
- /**
- * FETCH TAGS
- */
- async tags (obj, args, context, info) {
- return WIKI.models.tags.query().orderBy('tag', 'asc')
- },
- /**
- * FETCH PAGE TREE
- */
- 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: {
- /**
- * CREATE PAGE
- */
- async create(obj, args, context) {
- try {
- const page = await WIKI.models.pages.createPage({
- ...args,
- user: context.req.user
- })
- return {
- responseResult: graphHelper.generateSuccess('Page created successfully.'),
- page
- }
- } catch (err) {
- return graphHelper.generateError(err)
- }
- },
- /**
- * UPDATE PAGE
- */
- async update(obj, args, context) {
- try {
- const page = await WIKI.models.pages.updatePage({
- ...args,
- user: context.req.user
- })
- return {
- responseResult: graphHelper.generateSuccess('Page has been updated.'),
- page
- }
- } catch (err) {
- return graphHelper.generateError(err)
- }
- },
- /**
- * MOVE PAGE
- */
- async move(obj, args, context) {
- try {
- await WIKI.models.pages.movePage({
- ...args,
- user: context.req.user
- })
- return {
- responseResult: graphHelper.generateSuccess('Page has been moved.')
- }
- } catch (err) {
- return graphHelper.generateError(err)
- }
- },
- /**
- * DELETE PAGE
- */
- async delete(obj, args, context) {
- try {
- await WIKI.models.pages.deletePage({
- ...args,
- user: context.req.user
- })
- return {
- responseResult: graphHelper.generateSuccess('Page has been deleted.')
- }
- } catch (err) {
- return graphHelper.generateError(err)
- }
- },
- /**
- * FLUSH PAGE CACHE
- */
- 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)
- }
- },
- /**
- * MIGRATE ALL PAGES FROM SOURCE LOCALE TO TARGET LOCALE
- */
- 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)
- }
- },
- /**
- * REBUILD TREE
- */
- async rebuildTree(obj, args, context) {
- try {
- await WIKI.models.pages.rebuildTree()
- return {
- responseResult: graphHelper.generateSuccess('Page tree rebuilt successfully.')
- }
- } catch (err) {
- return graphHelper.generateError(err)
- }
- }
- },
- Page: {
- // comments(pg) {
- // return pg.$relatedQuery('comments')
- // }
- }
- }
|