const fs = require('fs') const { body, validationResult } = require('express-validator') const { res404, res500, checkValidations } = require('../plugins/controllersHelperFunctions') const { _sr } = require('../plugins/serverResponses') const { serialChecker } = require('../plugins/asanServiceSerialChecker') const _faSr = _sr.fa const guaranteeSerialsPath = './static/uploads/serials' const productSerialsPath = './static/uploads/serials_products' /// // router modules module.exports.addExel = [ [ body('type') .notEmpty() .withMessage('choose type') .bail() .custom((value, { rew }) => { const validValues = ['guaranteeSerial', 'orginality'] if (!validValues.includes(value)) return Promise.reject(new Error('invalid type')) else return Promise.resolve() }) ], checkValidations(validationResult), async (req, res) => { if (!req.files?.file) return res.status(422).json({ validation: { file: { msg: 'فایل را اضافه کنید' } } }) if (!req.files?.file.name.split('.').some(item => ['xlsx', 'xltx', 'xlsm', 'xlsb'].includes(item))) return res.status(422).json({ validation: { file: { msg: 'فرمت فایل درست نمیباشد' } } }) const file = req.files.file const { type } = req.body try { const path = type === 'guaranteeSerial' ? guaranteeSerialsPath : productSerialsPath const files = await fs.readdirSync(path) for await (const item of files) { if (file.name === item) return res.status(422).json({ validation: { file: { msg: 'نام فایل تکراریست' } } }) } await file.mv(`${path}/${file.name}`) return res.json({ message: _faSr.response.success_save }) } catch (err) { return res500(res, err) } } ] module.exports.getAllExels = [ (req, res) => { const type = req.query?.type if (!type) { res500(res, 'choose type') console.log("dfd") } const validValues = ['guaranteeSerial', 'orginality'] if (!validValues.includes(type)) return res500(res, 'choose type') const path = type === 'guaranteeSerial' ? guaranteeSerialsPath : productSerialsPath const downloadAblePath = type === 'guaranteeSerial' ? '/uploads/serials/' : '/uploads/serials_products/' fs.readdir(path, (err, files) => { if (err) return res500(res, err) const filesWithURL = files.map(item => { return { url: downloadAblePath, name: item } }) return res.json(filesWithURL) }) } ] module.exports.removeExel = [ (req, res) => { const type = req.query?.type if (!type) return res500(res, 'choose type') const validValues = ['guaranteeSerial', 'orginality'] if (!validValues.includes(type)) return res500(res, 'choose type') const path = type === 'guaranteeSerial' ? guaranteeSerialsPath : productSerialsPath fs.unlink(`${path}/${req.params.name}`, err => { if (err) return res404(res, _faSr.not_found.item_id) else return res.json({ message: _faSr.response.success_remove }) }) } ] module.exports.checkSerial = [ [ body('serial').notEmpty().withMessage('شماره سریال را وارد کنید'), body('type') .notEmpty() .withMessage('choose type') .bail() .custom((value, { rew }) => { const validValues = ['guaranteeSerial', 'orginality'] if (!validValues.includes(value)) return Promise.reject(new Error('invalid type')) else return Promise.resolve() }) ], checkValidations(validationResult), async (req, res) => { try { const { serial, type } = req.body const serialStatus = await serialChecker(serial, type) let okMsg if (type === 'guaranteeSerial') okMsg = 'شماره سریال گارانتی معتبر میباشد.' else okMsg = 'شماره سریال کالا معتبر میباشد.' let errMsg if (type === 'guaranteeSerial') errMsg = 'شماره سریال گارانتی معتبر نیست.' else errMsg = 'شماره سریال کالا معتبر نیست.' if (serialStatus) return res.json({ message: okMsg }) else return res404(res, errMsg) } catch (e) { return res500(res, `there is an error here --- ${e}`) } } ]