diff --git a/package-lock.json b/package-lock.json index 83f24cc..59c0e05 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,8 @@ "dependencies": { "formidable": "^3.5.4", "mssql": "^12.2.0", - "xlsx": "^0.18.5" + "xlsx": "^0.18.5", + "yup": "^1.7.1" } }, "node_modules/@azure-rest/core-client": { @@ -889,6 +890,12 @@ "node": ">= 0.6.0" } }, + "node_modules/property-expr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.6.tgz", + "integrity": "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==", + "license": "MIT" + }, "node_modules/readable-stream": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", @@ -1012,12 +1019,36 @@ "node": ">=18.17" } }, + "node_modules/tiny-case": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-case/-/tiny-case-1.0.3.tgz", + "integrity": "sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==", + "license": "MIT" + }, + "node_modules/toposort": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", + "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==", + "license": "MIT" + }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, + "node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/undici-types": { "version": "7.18.2", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", @@ -1092,6 +1123,18 @@ "engines": { "node": ">=0.8" } + }, + "node_modules/yup": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/yup/-/yup-1.7.1.tgz", + "integrity": "sha512-GKHFX2nXul2/4Dtfxhozv701jLQHdf6J34YDh2cEkpqoo8le5Mg6/LrdseVLrFarmFygZTlfIhHx/QKfb/QWXw==", + "license": "MIT", + "dependencies": { + "property-expr": "^2.0.5", + "tiny-case": "^1.0.3", + "toposort": "^2.0.2", + "type-fest": "^2.19.0" + } } } } diff --git a/package.json b/package.json index 79b9223..513940c 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,8 @@ "dependencies": { "formidable": "^3.5.4", "mssql": "^12.2.0", - "xlsx": "^0.18.5" + "xlsx": "^0.18.5", + "yup": "^1.7.1" }, "imports": { "#root/*": "./*" diff --git a/router/reports/parseExcel.handler.js b/router/reports/parseExcel.handler.js index 1d76420..f611715 100644 --- a/router/reports/parseExcel.handler.js +++ b/router/reports/parseExcel.handler.js @@ -1,7 +1,6 @@ import path from "node:path"; import xlsx from "xlsx"; import formidable from "formidable"; -// import db from "#root/db.js"; /** * Читает Excel файл отчетов и возвращает его в формате JSON diff --git a/router/reports/syncParsed.handler.js b/router/reports/syncParsed.handler.js index 0a437bf..ec2dd1c 100644 --- a/router/reports/syncParsed.handler.js +++ b/router/reports/syncParsed.handler.js @@ -1,4 +1,19 @@ +import yup from "yup"; + +var reportItemSchema = yup.object({ + date: yup.date().required(), + equipment: yup.string().nullable().required(), + reason_call: yup.string().required(), + job_description: yup.string().required(), + root_cause: yup.string().required(), + applicant: yup.number().required(), + executor_ids: yup.array(yup.number()).required(), +}); + /** @type {HTTPRouteHandler} */ -export default async ({ data, res }) => { +export default async ({ res, data }) => { + const inputSchema = yup.object({ reports: yup.array(reportItemSchema).required() }).required(); + + await inputSchema.validate(data); res.sendJson({ data }); };