Skip to content

Commit

Permalink
chore: cronjob to export variation
Browse files Browse the repository at this point in the history
  • Loading branch information
matheusgnreis committed Feb 7, 2024
1 parent 3ca1549 commit c85baac
Show file tree
Hide file tree
Showing 2 changed files with 87 additions and 1 deletion.
8 changes: 7 additions & 1 deletion functions/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -175,4 +175,10 @@ exports.checkExportedOrders = functions.runWith({ timeoutSeconds: 300 })
return prepareAppSdk().then(appSdk => {
checkExportedOrders({ appSdk })
})
})
})

// update product variation
const updateProduct = require('./lib/tiny/export-variation')
const queueCreateProduct = 'every 10 mins'
exports.onUpdateProduct = functions.pubsub.schedule(queueCreateProduct).onRun(updateProduct)
console.log(`-- Sheduled active access from '${queueCreateProduct}'`)
80 changes: 80 additions & 0 deletions functions/lib/tiny/export-variation.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
const admin = require('firebase-admin')
const { setup } = require('@ecomplus/application-sdk')
const { getFirestore } = require('firebase-admin/firestore')

const parseVariation = require('../integration/parsers/product-to-tiny-variation')

const getAppSdk = () => {
return new Promise(resolve => {
setup(null, true, admin.firestore())
.then(appSdk => resolve(appSdk))
})
}

const firestoreColl = 'variations'
module.exports = async () => {
const appSdk = await getAppSdk(admin)
let documentRef, storeId, product, variations, originalTinyProduct, appData
if (firestoreColl) {
const db = getFirestore()
const d = new Date(new Date().getTime() - 9000)
const documentSnapshot = await db.collection(firestoreColl)
.where('queuedAt', '<=', d)
.orderBy('queuedAt')
.limit(1)
.get()
const info = documentSnapshot.docs && documentSnapshot.docs[0] && documentSnapshot.docs[0].data()
storeId = info.storeId
appData = info.appData
product = info.product
variations = info.variations
originalTinyProduct = info.originalTinyProduct
documentRef = require('firebase-admin')
.firestore()
.doc(`${firestoreColl}/${storeId}`)
return appSdk.getAuth(storeId)
.then(async (auth) => {
if (variations && variations.length) {
const products = variations.slice(0, 8)
for (let i = 0; i < products.length; i++) {
try {
console.log('Sending:', products.length, 'index:', i)
const parsedVariation = parseVariation(product, products[i], originalTinyProduct, appData, storeId)
await new Promise((resolve) => setTimeout(resolve, 1000))
tiny.post('/produto.alterar.php', {
produto: {
produtos: [{
produto: parsedVariation
}]
}
}).then(async response => {
console.log(`Product ${products[i].codigo} sync successfully | #${storeId}`, response.data)
variations.splice(i, 1)
await documentRef.set({
storeId,
product,
variations,
originalTinyProduct,
appData,
queuedAt: admin.firestore.Timestamp.now()
})
console.log(`#${storeId} saving in firestore list of products after create or update`, products.length)
})
} catch (err) {
console.error(`Product ${products[i]._id} sync failed | #${storeId}`, err)
}
}
}
})
.catch((err) => {
if (err.appWithoutAuth) {
console.error(err)
} else {
throw err
}
})
.then(() => {
console.log('>> End Event exportation')
})
}
}

0 comments on commit c85baac

Please sign in to comment.