59 lines
2.0 KiB
JavaScript
59 lines
2.0 KiB
JavaScript
const fs = require('fs')
|
|
const readXlsxFile = require('read-excel-file/node')
|
|
|
|
const guaranteeSerialsPath = './static/uploads/serials'
|
|
const productSerialsPath = './static/uploads/serials_products'
|
|
|
|
const serialChecker = async (serial, type = 'guaranteeSerial', g = 1) => {
|
|
let exelsPath
|
|
if (type === 'guaranteeSerial') exelsPath = guaranteeSerialsPath + g
|
|
if (type === 'orginality') exelsPath = productSerialsPath + g
|
|
|
|
const lowerSerial = serial.toLowerCase()
|
|
// a promise to lowercase items and filter null or DateObjects
|
|
const toLowerCaseArray = array => {
|
|
return new Promise((resolve, reject) => {
|
|
const newArray = []
|
|
array.forEach((item, index) => {
|
|
if (item !== null && typeof item === 'string') newArray.push(item.toLowerCase())
|
|
if (item !== null && typeof item === 'number') newArray.push(item.toString())
|
|
if (index === array.length - 1) return resolve(newArray)
|
|
})
|
|
})
|
|
}
|
|
|
|
// create an array of all exel files data
|
|
const exelFilesData = []
|
|
try {
|
|
// get a list of all exel files
|
|
const serialFiles = await fs.readdirSync(exelsPath)
|
|
|
|
// push each exel file data to exelFilesData array
|
|
let n0 = 0
|
|
for await (const file of serialFiles) {
|
|
// reading all exel files one by one
|
|
const exelFile = await readXlsxFile(`${exelsPath}/${file}`)
|
|
exelFilesData.push(exelFile)
|
|
|
|
// flat exelFilesData and filter and lowerCase it's items
|
|
if (n0 === serialFiles.length - 1) {
|
|
const flattedArray = exelFilesData.flat(10000)
|
|
const lowerCaseFlattedArray = await toLowerCaseArray(flattedArray)
|
|
|
|
// loop throw lowerCased items to find exact match item
|
|
let n1 = 0
|
|
for await (const item of lowerCaseFlattedArray) {
|
|
if (item === lowerSerial) return true
|
|
if (n1 === lowerCaseFlattedArray.length - 1) return false
|
|
n1++
|
|
}
|
|
}
|
|
n0++
|
|
}
|
|
} catch (e) {
|
|
throw new Error(e)
|
|
}
|
|
}
|
|
|
|
module.exports.serialChecker = serialChecker
|