Files
asan-service/server/controllers/serialsExelController.js
T
Mr Swift 40c62d7332 Update
2024-10-16 18:29:35 +03:30

122 lines
4.2 KiB
JavaScript

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, g } = req.body
try {
const path = (type === 'guaranteeSerial' ? guaranteeSerialsPath : productSerialsPath) + `/${g}`
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
const g = req.query?.g
if (!type || !g) {
res500(res, 'choose type')
}
const validValues = ['guaranteeSerial', 'orginality']
if (!validValues.includes(type)) return res500(res, 'choose type')
const path = (type === 'guaranteeSerial' ? guaranteeSerialsPath : productSerialsPath) + `/${g}`
const downloadAblePath = (type === 'guaranteeSerial' ? '/uploads/serials' : '/uploads/serials_products') + `/${g}`
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
const g = req.query?.g
if (!type || !g) return res500(res, 'choose type')
const validValues = ['guaranteeSerial', 'orginality']
if (!validValues.includes(type)) return res500(res, 'choose type')
const path = (type === 'guaranteeSerial' ? guaranteeSerialsPath : productSerialsPath) + `/${g}`
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, g } = req.body
const serialStatus = await serialChecker(serial, type, g)
console.log(serialStatus);
let okMsg
if (type === 'guaranteeSerial') okMsg = serialStatus
else okMsg = serialStatus
let errMsg
if (type === 'guaranteeSerial') errMsg = 'شماره سریال گارانتی معتبر نیست.'
else errMsg = 'شماره سریال کالا معتبر نیست.'
if (serialStatus) return res.json({ message: okMsg })
else return res404(res, errMsg)
} catch (e) {
console.log(e)
return res404(res, e)
}
}
]