| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 | 
							- const _ = require('lodash')
 
- const graphHelper = require('../../helpers/graph')
 
- /* global WIKI */
 
- module.exports = {
 
-   Query: {
 
-     async comments() { return {} }
 
-   },
 
-   Mutation: {
 
-     async comments() { return {} }
 
-   },
 
-   CommentQuery: {
 
-     /**
 
-      * Fetch list of Comments Providers
 
-      */
 
-     async providers(obj, args, context, info) {
 
-       const providers = await WIKI.models.commentProviders.getProviders()
 
-       return providers.map(provider => {
 
-         const providerInfo = _.find(WIKI.data.commentProviders, ['key', provider.key]) || {}
 
-         return {
 
-           ...providerInfo,
 
-           ...provider,
 
-           config: _.sortBy(_.transform(provider.config, (res, value, key) => {
 
-             const configData = _.get(providerInfo.props, key, false)
 
-             if (configData) {
 
-               res.push({
 
-                 key,
 
-                 value: JSON.stringify({
 
-                   ...configData,
 
-                   value
 
-                 })
 
-               })
 
-             }
 
-           }, []), 'key')
 
-         }
 
-       })
 
-     },
 
-     /**
 
-      * Fetch list of comments for a page
 
-      */
 
-     async list (obj, args, context) {
 
-       const page = await WIKI.models.pages.query().select('id').findOne({ localeCode: args.locale, path: args.path })
 
-       if (page) {
 
-         if (WIKI.auth.checkAccess(context.req.user, ['read:comments'], args)) {
 
-           const comments = await WIKI.models.comments.query().where('pageId', page.id).orderBy('createdAt')
 
-           return comments.map(c => ({
 
-             ...c,
 
-             authorName: c.name,
 
-             authorEmail: c.email,
 
-             authorIP: c.ip
 
-           }))
 
-         } else {
 
-           throw new WIKI.Error.CommentViewForbidden()
 
-         }
 
-       } else {
 
-         return []
 
-       }
 
-     },
 
-     /**
 
-      * Fetch a single comment
 
-      */
 
-     async single (obj, args, context) {
 
-       const cm = await WIKI.data.commentProvider.getCommentById(args.id)
 
-       if (!cm || !cm.pageId) {
 
-         throw new WIKI.Error.CommentNotFound()
 
-       }
 
-       const page = await WIKI.models.pages.query().select('localeCode', 'path').findById(cm.pageId)
 
-       if (page) {
 
-         if (WIKI.auth.checkAccess(context.req.user, ['read:comments'], {
 
-           path: page.path,
 
-           locale: page.localeCode
 
-         })) {
 
-           return {
 
-             ...cm,
 
-             authorName: cm.name,
 
-             authorEmail: cm.email,
 
-             authorIP: cm.ip
 
-           }
 
-         } else {
 
-           throw new WIKI.Error.CommentViewForbidden()
 
-         }
 
-       } else {
 
-         WIKI.logger.warn(`Comment #${cm.id} is linked to a page #${cm.pageId} that doesn't exist! [ERROR]`)
 
-         throw new WIKI.Error.CommentGenericError()
 
-       }
 
-     }
 
-   },
 
-   CommentMutation: {
 
-     /**
 
-      * Create New Comment
 
-      */
 
-     async create (obj, args, context) {
 
-       try {
 
-         const cmId = await WIKI.models.comments.postNewComment({
 
-           ...args,
 
-           user: context.req.user,
 
-           ip: context.req.ip
 
-         })
 
-         return {
 
-           responseResult: graphHelper.generateSuccess('New comment posted successfully'),
 
-           id: cmId
 
-         }
 
-       } catch (err) {
 
-         return graphHelper.generateError(err)
 
-       }
 
-     },
 
-     /**
 
-      * Update an Existing Comment
 
-      */
 
-     async update (obj, args, context) {
 
-       try {
 
-         const cmRender = await WIKI.models.comments.updateComment({
 
-           ...args,
 
-           user: context.req.user,
 
-           ip: context.req.ip
 
-         })
 
-         return {
 
-           responseResult: graphHelper.generateSuccess('Comment updated successfully'),
 
-           render: cmRender
 
-         }
 
-       } catch (err) {
 
-         return graphHelper.generateError(err)
 
-       }
 
-     },
 
-     /**
 
-      * Delete an Existing Comment
 
-      */
 
-     async delete (obj, args, context) {
 
-       try {
 
-         await WIKI.models.comments.deleteComment({
 
-           id: args.id,
 
-           user: context.req.user,
 
-           ip: context.req.ip
 
-         })
 
-         return {
 
-           responseResult: graphHelper.generateSuccess('Comment deleted successfully')
 
-         }
 
-       } catch (err) {
 
-         return graphHelper.generateError(err)
 
-       }
 
-     },
 
-     /**
 
-      * Update Comments Providers
 
-      */
 
-     async updateProviders(obj, args, context) {
 
-       try {
 
-         for (let provider of args.providers) {
 
-           await WIKI.models.commentProviders.query().patch({
 
-             isEnabled: provider.isEnabled,
 
-             config: _.reduce(provider.config, (result, value, key) => {
 
-               _.set(result, `${value.key}`, _.get(JSON.parse(value.value), 'v', null))
 
-               return result
 
-             }, {})
 
-           }).where('key', provider.key)
 
-         }
 
-         await WIKI.models.commentProviders.initProvider()
 
-         return {
 
-           responseResult: graphHelper.generateSuccess('Comment Providers updated successfully')
 
-         }
 
-       } catch (err) {
 
-         return graphHelper.generateError(err)
 
-       }
 
-     }
 
-   }
 
- }
 
 
  |