feat: save page + create event for storage targets

This commit is contained in:
NGPixel
2018-07-22 16:25:39 -04:00
parent cb84df7a53
commit 076e923d48
22 changed files with 158 additions and 89 deletions

View File

@@ -61,12 +61,19 @@ jobs:
fetchGraphLocale:
onInit: false
cron: false
concurrency: 0
purgeUploads:
onInit: true
cron: '*/15 * * * *'
concurrency: 0
syncGraphLocales:
onInit: true
cron: '0 0 * * *'
concurrency: 0
syncStorage:
onInit: false
cron: false
concurrency: 1
telemetry:
BUGSNAG_ID: 'bb4b324d0675bcbba10025617fd2cec8'
BUGSNAG_REMOTE: 'https://notify.bugsnag.com'

View File

@@ -10,10 +10,14 @@ module.exports = {
init() {
_.forOwn(WIKI.data.jobs, (queueParams, queueName) => {
this.job[queueName] = new Bull(queueName, {
prefix: `q-${WIKI.config.ha.uid}`,
prefix: `queue`,
redis: WIKI.config.redis
})
this.job[queueName].process(path.join(WIKI.SERVERPATH, `jobs/${_.kebabCase(queueName)}.js`))
if (queueParams.concurrency > 0) {
this.job[queueName].process(queueParams.concurrency, path.join(WIKI.SERVERPATH, `jobs/${_.kebabCase(queueName)}.js`))
} else {
this.job[queueName].process(path.join(WIKI.SERVERPATH, `jobs/${_.kebabCase(queueName)}.js`))
}
})
return this
},
@@ -36,7 +40,7 @@ module.exports = {
return Promise.each(_.keys(WIKI.data.jobs), queueName => {
return new Promise((resolve, reject) => {
let keyStream = WIKI.redis.scanStream({
match: `q-${WIKI.config.ha.uid}:${queueName}:*`
match: `queue:${queueName}:*`
})
keyStream.on('data', resultKeys => {
if (resultKeys.length > 0) {

View File

@@ -1,5 +1,7 @@
const Model = require('objection').Model
/* global WIKI */
/**
* Pages model
*/
@@ -75,4 +77,22 @@ module.exports = class Page extends Model {
this.createdAt = new Date().toISOString()
this.updatedAt = new Date().toISOString()
}
static async createPage(opts) {
const page = await WIKI.db.pages.query().insertAndFetch({
authorId: opts.authorId,
content: opts.content,
description: opts.description,
editorKey: opts.editor,
isPrivate: opts.isPrivate,
isPublished: opts.isPublished,
localeCode: opts.locale,
path: opts.path,
publishEndDate: opts.publishEndDate,
publishStartDate: opts.publishStartDate,
title: opts.title
})
await WIKI.db.storage.createPage(page)
return page
}
}

View File

@@ -86,4 +86,19 @@ module.exports = class Storage extends Model {
WIKI.logger.error(err)
}
}
static async createPage(page) {
const targets = await WIKI.db.storage.query().where('isEnabled', true)
if (targets && targets.length > 0) {
_.forEach(targets, target => {
WIKI.queue.job.syncStorage.add({
event: 'created',
target,
page
}, {
removeOnComplete: true
})
})
}
}
}

View File

@@ -193,7 +193,6 @@ module.exports = class User extends Model {
}
static async login (opts, context) {
console.info(context)
if (_.has(WIKI.auth.strategies, opts.strategy)) {
_.set(context.req, 'body.email', opts.username)
_.set(context.req, 'body.password', opts.password)

View File

@@ -22,16 +22,9 @@ module.exports = {
},
PageMutation: {
async create(obj, args, context) {
const page = await WIKI.db.pages.query().insertAndFetch({
path: args.path,
title: args.title,
description: args.description,
const page = await WIKI.db.pages.createPage({
...args,
isPrivate: false,
isPublished: args.isPublished,
publishStartDate: args.publishStartDate,
publishEndDate: args.publishEndDate,
localeCode: args.locale,
editorKey: args.editor,
authorId: context.req.user.id
})
return {

View File

@@ -34,20 +34,22 @@ type PageQuery {
type PageMutation {
create(
description: String
editor: String
content: String!
description: String!
editor: String!
isPublished: Boolean!
isPrivate: Boolean
isPrivate: Boolean!
locale: String!
path: String!
publishEndDate: Date
publishStartDate: Date
tags: [String]
tags: [String]!
title: String!
): PageResponse
update(
id: Int!
content: String
description: String
editor: String
isPublished: Boolean

View File

@@ -0,0 +1,20 @@
require('../core/worker')
/* global WIKI */
module.exports = async (job) => {
WIKI.logger.info(`Syncing with storage provider ${job.data.target.title}...`)
try {
const target = require(`../modules/storage/${job.data.target.key}/storage.js`)
target[job.data.event].call({
config: job.data.target.config,
mode: job.data.target.mode,
page: job.data.page
})
WIKI.logger.info(`Syncing with storage provider ${job.data.target.title}: [ COMPLETED ]`)
} catch (err) {
WIKI.logger.error(`Syncing with storage provider ${job.data.target.title}: [ FAILED ]`)
WIKI.logger.error(err.message)
}
}

View File

@@ -1,23 +1,23 @@
module.exports = {
async activated(opts) {
async activated() {
},
async deactivated(opts) {
async deactivated() {
},
async init(opts) {
async init() {
},
async created(opts) {
async created() {
},
async updated(opts) {
async updated() {
},
async deleted(opts) {
async deleted() {
},
async renamed(opts) {
async renamed() {
}
}

View File

@@ -1,23 +1,23 @@
module.exports = {
async activated(opts) {
async activated() {
},
async deactivated(opts) {
async deactivated() {
},
async init(opts) {
async init() {
},
async created(opts) {
async created() {
},
async updated(opts) {
async updated() {
},
async deleted(opts) {
async deleted() {
},
async renamed(opts) {
async renamed() {
}
}

View File

@@ -1,23 +1,23 @@
module.exports = {
async activated(opts) {
async activated() {
},
async deactivated(opts) {
async deactivated() {
},
async init(opts) {
async init() {
},
async created(opts) {
async created() {
},
async updated(opts) {
async updated() {
},
async deleted(opts) {
async deleted() {
},
async renamed(opts) {
async renamed() {
}
}

View File

@@ -1,23 +1,23 @@
module.exports = {
async activated(opts) {
async activated() {
},
async deactivated(opts) {
async deactivated() {
},
async init(opts) {
async init() {
},
async created(opts) {
async created() {
},
async updated(opts) {
async updated() {
},
async deleted(opts) {
async deleted() {
},
async renamed(opts) {
async renamed() {
}
}

View File

@@ -1,23 +1,23 @@
module.exports = {
async activated(opts) {
async activated() {
},
async deactivated(opts) {
async deactivated() {
},
async init(opts) {
async init() {
},
async created(opts) {
async created() {
},
async updated(opts) {
async updated() {
},
async deleted(opts) {
async deleted() {
},
async renamed(opts) {
async renamed() {
}
}

View File

@@ -1,23 +1,23 @@
module.exports = {
async activated(opts) {
async activated() {
},
async deactivated(opts) {
async deactivated() {
},
async init(opts) {
async init() {
},
async created(opts) {
async created() {
},
async updated(opts) {
async updated() {
},
async deleted(opts) {
async deleted() {
},
async renamed(opts) {
async renamed() {
}
}

View File

@@ -1,23 +1,23 @@
module.exports = {
async activated(opts) {
async activated() {
},
async deactivated(opts) {
async deactivated() {
},
async init(opts) {
async init() {
},
async created(opts) {
async created() {
},
async updated(opts) {
async updated() {
},
async deleted(opts) {
async deleted() {
},
async renamed(opts) {
async renamed() {
}
}

View File

@@ -1,23 +1,23 @@
module.exports = {
async activated(opts) {
async activated() {
},
async deactivated(opts) {
async deactivated() {
},
async init(opts) {
async init() {
},
async created(opts) {
async created() {
},
async updated(opts) {
async updated() {
},
async deleted(opts) {
async deleted() {
},
async renamed(opts) {
async renamed() {
}
}

View File

@@ -1,23 +1,23 @@
module.exports = {
async activated(opts) {
async activated() {
},
async deactivated(opts) {
async deactivated() {
},
async init(opts) {
async init() {
},
async created(opts) {
async created() {
},
async updated(opts) {
async updated() {
},
async deleted(opts) {
async deleted() {
},
async renamed(opts) {
async renamed() {
}
}