1 | var Ajv = require('ajv')
|
2 | var ajv = new Ajv({allErrors: true})
|
3 |
|
4 | var lRequester = require('./requester')
|
5 | var requester = new lRequester()
|
6 |
|
7 | var Queue = function(object) {
|
8 | this.counter = 1
|
9 | this.masterFunction = null
|
10 | if(object[0] instanceof Function) {
|
11 | this.queue = Object.entries(object)
|
12 | this.sharedObject = {}
|
13 | } else {
|
14 | this.queue = Object.entries(object)
|
15 | this.sharedObject = this.queue.shift()[1] || {}
|
16 | }
|
17 | this.queueLength = this.queue.length
|
18 | }
|
19 |
|
20 | Queue.prototype.next = function() {
|
21 | if(this.queueLength == this.counter) {
|
22 | var callback = this.queue.shift()[1]
|
23 | this.masterFunction(this.sharedObject)
|
24 | .then(function(response) {
|
25 | if(process.env.QUEUE_THEN_RESPONSE == 'true') console.developer.log(response)
|
26 | callback(false, {func: response.func || '@queue-next-then', lCode: response.lCode || '-QNT', msg: response.msg || 'Sikeres lefutás!', type: 'success', document: response.document || null})
|
27 | })
|
28 | .catch(function(response) {
|
29 | if(process.env.QUEUE_CATCH_RESPONSE == 'true') console.developer.log(response)
|
30 | callback(true, {func: response.func || '@queue-next-catch', lCode: response.lCode || '-QNC', msg: response.msg || 'Sikertelen lefutás!', type: response.type || 'error'})
|
31 | })
|
32 | }
|
33 | else {
|
34 | ++this.counter
|
35 | let currentItem = this.queue.shift()[1]
|
36 | if(currentItem.type == 'request') {
|
37 | this.sharedObject.request = currentItem
|
38 | switch(currentItem.method) {
|
39 | case 'GET': return requester.get(this.sharedObject, this)
|
40 | case 'POST': return requester.post(this.sharedObject, this)
|
41 | default: this.stop({func: '@queue-requester', lCode: '-QR', msg: `Nincs megadva lekérés típus (URL: ${currentItem.url})`, type: 'request-error'})
|
42 | }
|
43 | }
|
44 | else return currentItem(this.sharedObject, this)
|
45 | }
|
46 | }
|
47 |
|
48 | Queue.prototype.stop = function(object) {
|
49 | var callback = this.queue.pop()[1]
|
50 | this.queue = null
|
51 | if(process.env.QUEUE_STOP_LOG == 'true') console.developer.log(object)
|
52 | callback(true, {func: object.func || '@queue-stop', lCode: object.lCode || '-QS', msg: object.msg || 'Sikertelen lefutás!', type: object.type || 'queue-error'})
|
53 | }
|
54 |
|
55 | Queue.prototype.setMasterFunction = function(schema, masterFunction) {
|
56 | if(schema === undefined || schema == null) this.masterFunction = masterFunction
|
57 | else this.masterFunction = function(object) {
|
58 | return new Promise(function(resolve, reject) {
|
59 | var valid = ajv.validate(schema, object)
|
60 | if(process.env.AJV_ERROR_LOG == 'true') console.developer.log(ajv.errors)
|
61 | if(valid) {
|
62 | masterFunction(object).then(function(response) {
|
63 | resolve(response)
|
64 | }).catch(function(response) {
|
65 | reject(response)
|
66 | })
|
67 | }
|
68 | else reject({func: '@dataChecker', lCode: '-DC', msg: 'Hibás adatokat adott meg!', type: 'data-error'})
|
69 | })
|
70 | }
|
71 | }
|
72 |
|
73 | module.exports = Queue |
\ | No newline at end of file |