analytics.mjs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import { find, get, reduce, set, sortBy, transform } from 'lodash-es'
  2. import { generateError, generateSuccess } from '../../helpers/graph.mjs'
  3. export default {
  4. Query: {
  5. async analyticsProviders(obj, args, context, info) {
  6. if (!WIKI.auth.checkAccess(context.req.user, ['manage:system'])) {
  7. throw new Error('ERR_FORBIDDEN')
  8. }
  9. let providers = await WIKI.db.analytics.getProviders(args.isEnabled)
  10. providers = providers.map(stg => {
  11. const providerInfo = find(WIKI.data.analytics, ['key', stg.key]) || {}
  12. return {
  13. ...providerInfo,
  14. ...stg,
  15. config: sortBy(transform(stg.config, (res, value, key) => {
  16. const configData = get(providerInfo.props, key, {})
  17. res.push({
  18. key,
  19. value: JSON.stringify({
  20. ...configData,
  21. value
  22. })
  23. })
  24. }, []), 'key')
  25. }
  26. })
  27. return providers
  28. }
  29. },
  30. Mutation: {
  31. async updateAnalyticsProviders(obj, args, context) {
  32. try {
  33. if (!WIKI.auth.checkAccess(context.req.user, ['manage:system'])) {
  34. throw new Error('ERR_FORBIDDEN')
  35. }
  36. for (let str of args.providers) {
  37. await WIKI.db.analytics.query().patch({
  38. isEnabled: str.isEnabled,
  39. config: reduce(str.config, (result, value, key) => {
  40. set(result, `${value.key}`, get(JSON.parse(value.value), 'v', null))
  41. return result
  42. }, {})
  43. }).where('key', str.key)
  44. await WIKI.cache.del('analytics')
  45. }
  46. return {
  47. responseResult: generateSuccess('Providers updated successfully')
  48. }
  49. } catch (err) {
  50. return generateError(err)
  51. }
  52. }
  53. }
  54. }