diff --git a/package-lock.json b/package-lock.json index 2393a08417e23f492a977a8607d146de5c1dea34..4b893a5420dc4a6b35372519366baf2bce10712d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -51,12 +51,6 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, - "jsonc-parser": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.1.0.tgz", - "integrity": "sha512-DRf0QjnNeCUds3xTjKlQQ3DpJD51GvDjJfnxUVWg6PZTo2otSm+slzNAxU/35hF8/oJIKoG9slq30JYOsF2azg==", - "dev": true - }, "rxjs": { "version": "6.6.7", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", @@ -93,21 +87,6 @@ "rxjs": "6.6.7" }, "dependencies": { - "jsonc-parser": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.1.0.tgz", - "integrity": "sha512-DRf0QjnNeCUds3xTjKlQQ3DpJD51GvDjJfnxUVWg6PZTo2otSm+slzNAxU/35hF8/oJIKoG9slq30JYOsF2azg==", - "dev": true - }, - "magic-string": { - "version": "0.26.2", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.2.tgz", - "integrity": "sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.8" - } - }, "rxjs": { "version": "6.6.7", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", @@ -2501,9 +2480,9 @@ } }, "@eslint/eslintrc": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.1.tgz", - "integrity": "sha512-OhSY22oQQdw3zgPOOwdoj01l/Dzl1Z+xyUP33tkSN+aqyEhymJCcPHyXt+ylW8FSe0TfRC2VG+ROQOapD0aZSQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz", + "integrity": "sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -3444,27 +3423,6 @@ "integrity": "sha512-b2TT2X6BFbnNoeteiaxCIiHaFcSbVW+S5yygYqiIq5i6H77yIU3IVuLdpQkHq8/EqOWFwMopLN8jdkUT71Am9w==", "requires": { "axios": "0.27.2" - }, - "dependencies": { - "axios": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", - "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", - "requires": { - "follow-redirects": "^1.14.9", - "form-data": "^4.0.0" - } - }, - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - } } }, "@nestjs/cli": { @@ -3497,75 +3455,6 @@ "webpack-node-externals": "3.0.0" }, "dependencies": { - "@nestjs/schematics": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/@nestjs/schematics/-/schematics-9.0.3.tgz", - "integrity": "sha512-kZrU/lrpVd2cnK8I3ibDb3Wi1ppl3wX3U3lVWoL+DzRRoezWKkh8upEL4q0koKmuXnsmLiu3UPxFeMOrJV7TSA==", - "dev": true, - "requires": { - "@angular-devkit/core": "14.2.1", - "@angular-devkit/schematics": "14.2.1", - "fs-extra": "10.1.0", - "jsonc-parser": "3.2.0", - "pluralize": "8.0.0" - }, - "dependencies": { - "@angular-devkit/core": { - "version": "14.2.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-14.2.1.tgz", - "integrity": "sha512-lW8oNGuJqr4r31FWBjfWQYkSXdiOHBGOThIEtHvUVBKfPF/oVrupLueCUgBPel+NvxENXdo93uPsqHN7bZbmsQ==", - "dev": true, - "requires": { - "ajv": "8.11.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.1.0", - "rxjs": "6.6.7", - "source-map": "0.7.4" - }, - "dependencies": { - "jsonc-parser": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.1.0.tgz", - "integrity": "sha512-DRf0QjnNeCUds3xTjKlQQ3DpJD51GvDjJfnxUVWg6PZTo2otSm+slzNAxU/35hF8/oJIKoG9slq30JYOsF2azg==", - "dev": true - } - } - }, - "@angular-devkit/schematics": { - "version": "14.2.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-14.2.1.tgz", - "integrity": "sha512-0U18FwDYt4zROBPrvewH6iBTkf2ozVHN4/gxUb9jWrqVw8mPU5AWc/iYxQLHBSinkr2Egjo1H/i9aBqgJSeh3g==", - "dev": true, - "requires": { - "@angular-devkit/core": "14.2.1", - "jsonc-parser": "3.1.0", - "magic-string": "0.26.2", - "ora": "5.4.1", - "rxjs": "6.6.7" - }, - "dependencies": { - "jsonc-parser": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.1.0.tgz", - "integrity": "sha512-DRf0QjnNeCUds3xTjKlQQ3DpJD51GvDjJfnxUVWg6PZTo2otSm+slzNAxU/35hF8/oJIKoG9slq30JYOsF2azg==", - "dev": true - } - } - } - } - }, - "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -3616,50 +3505,18 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, "json5": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", "dev": true }, - "jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true - }, - "magic-string": { - "version": "0.26.2", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.2.tgz", - "integrity": "sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.8" - } - }, "readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -3669,19 +3526,10 @@ "picomatch": "^2.2.1" } }, - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, "source-map-support": { @@ -3692,14 +3540,6 @@ "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } } }, "supports-color": { @@ -3721,18 +3561,6 @@ "minimist": "^1.2.6", "strip-bom": "^3.0.0" } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true } } }, @@ -3940,6 +3768,12 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, + "jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, "rxjs": { "version": "6.6.7", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", @@ -6174,9 +6008,9 @@ } }, "cli-spinners": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.5.0.tgz", - "integrity": "sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", + "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==", "dev": true }, "cli-table3": { @@ -7175,7 +7009,7 @@ "defaults": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", "dev": true, "requires": { "clone": "^1.0.2" @@ -7706,12 +7540,12 @@ } }, "eslint": { - "version": "8.23.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.23.0.tgz", - "integrity": "sha512-pBG/XOn0MsJcKcTRLr27S5HpzQo4kLr+HjLQIyK4EiCsijDl/TB+h5uEuJU6bQ8Edvwz1XWOjpaP2qgnXGpTcA==", + "version": "8.23.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.23.1.tgz", + "integrity": "sha512-w7C1IXCc6fNqjpuYd0yPlcTKKmHlHHktRkzmBPZ+7cvNBQuiNjx0xaMTjAJGCafJhQkrFJooREv0CtrVzmHwqg==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.3.1", + "@eslint/eslintrc": "^1.3.2", "@humanwhocodes/config-array": "^0.10.4", "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", "@humanwhocodes/module-importer": "^1.0.1", @@ -7730,7 +7564,6 @@ "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", - "functional-red-black-tree": "^1.0.1", "glob-parent": "^6.0.1", "globals": "^13.15.0", "globby": "^11.1.0", @@ -7739,6 +7572,7 @@ "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", @@ -8652,9 +8486,9 @@ "dev": true }, "follow-redirects": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.0.tgz", - "integrity": "sha512-aExlJShTV4qOUOL7yF1U5tvLCB0xQuudbf6toyYA0E/acBNw71mvjFTnLaRp50aQaYocMR0a/RMMBIHeZnGyjQ==" + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" }, "for-in": { "version": "1.0.2", @@ -8875,7 +8709,7 @@ "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", "dev": true }, "gauge": { @@ -11532,6 +11366,12 @@ } } }, + "js-sdsl": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.4.tgz", + "integrity": "sha512-Y2/yD55y5jteOAmY50JbUZYwk3CP3wnLPEZnlR1w9oKhITrBEtAxwuWKebFf8hMrPMgbYwFoWK/lH2sBkErELw==", + "dev": true + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -11735,7 +11575,7 @@ "json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, "json-stringify-safe": { @@ -11753,9 +11593,9 @@ } }, "jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.1.0.tgz", + "integrity": "sha512-DRf0QjnNeCUds3xTjKlQQ3DpJD51GvDjJfnxUVWg6PZTo2otSm+slzNAxU/35hF8/oJIKoG9slq30JYOsF2azg==", "dev": true }, "jsonfile": { @@ -15465,7 +15305,7 @@ "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, "throat": { @@ -16323,7 +16163,7 @@ "wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, "requires": { "defaults": "^1.0.3" diff --git a/scripts/data/structures.js b/scripts/data/structures.js index c26a09ddce97a3cd4b0485599ac5b0e0eaf6fdad..e650a2af343c008d5a238e67c83e64d0e8a76aab 100644 --- a/scripts/data/structures.js +++ b/scripts/data/structures.js @@ -45,7 +45,7 @@ module.exports = { time: [ { closing: '12:00', - opening: '9:00', + opening: '09:00', }, { closing: '17:30', @@ -71,7 +71,7 @@ module.exports = { time: [ { closing: '12:00', - opening: '9:00', + opening: '09:00', }, { closing: '17:30', @@ -84,7 +84,7 @@ module.exports = { time: [ { closing: '12:00', - opening: '9:00', + opening: '09:00', }, { closing: '17:30', @@ -97,7 +97,7 @@ module.exports = { time: [ { closing: '12:00', - opening: '9:00', + opening: '09:00', }, ], }, @@ -367,7 +367,7 @@ module.exports = { time: [ { closing: '12:30', - opening: '9:00', + opening: '09:00', }, { closing: '17:00', @@ -380,7 +380,7 @@ module.exports = { time: [ { closing: '12:30', - opening: '9:00', + opening: '09:00', }, { closing: '17:00', @@ -393,7 +393,7 @@ module.exports = { time: [ { closing: '12:30', - opening: '9:00', + opening: '09:00', }, { closing: '17:00', @@ -406,7 +406,7 @@ module.exports = { time: [ { closing: '12:30', - opening: '9:00', + opening: '09:00', }, { closing: '17:00', @@ -419,7 +419,7 @@ module.exports = { time: [ { closing: '12:30', - opening: '9:00', + opening: '09:00', }, ], }, @@ -698,7 +698,7 @@ module.exports = { time: [ { closing: '17:00', - opening: '9:00', + opening: '09:00', }, ], }, @@ -707,7 +707,7 @@ module.exports = { time: [ { closing: '17:00', - opening: '9:00', + opening: '09:00', }, ], }, @@ -716,7 +716,7 @@ module.exports = { time: [ { closing: '17:00', - opening: '9:00', + opening: '09:00', }, ], }, @@ -725,7 +725,7 @@ module.exports = { time: [ { closing: '17:00', - opening: '9:00', + opening: '09:00', }, ], }, @@ -734,7 +734,7 @@ module.exports = { time: [ { closing: '17:00', - opening: '9:00', + opening: '09:00', }, ], }, diff --git a/src/structures/dto/structure.dto.ts b/src/structures/dto/structure.dto.ts index 5eab783133a4f07dc0a19f1d0587cedd87e80a52..cf647c26a260ae17768b2c2949479f954940f06f 100644 --- a/src/structures/dto/structure.dto.ts +++ b/src/structures/dto/structure.dto.ts @@ -3,6 +3,7 @@ import { ArrayNotEmpty, IsArray, IsNotEmpty, ValidateNested } from 'class-valida import { Address } from '../schemas/address.schema'; import { Week } from '../../shared/schemas/week.schema'; import { PersonalOfferDocument } from '../../personal-offers/schemas/personal-offer.schema'; +import { ApiProperty } from '@nestjs/swagger'; export class StructureDto { numero: string; @@ -13,6 +14,7 @@ export class StructureDto { @IsNotEmpty() structureName: string; + @ApiProperty({ required: true }) @IsNotEmpty() structureType: string; @@ -24,6 +26,7 @@ export class StructureDto { contactPhone: string; + @ApiProperty({ required: true }) @IsNotEmpty() contactMail: string; @@ -35,8 +38,11 @@ export class StructureDto { lockdownActivity: string; otherDescription: string; + + @ApiProperty({ required: true }) @IsNotEmpty() pmrAccess: boolean; + publicsAccompaniment: string[]; proceduresAccompaniment: string[]; remoteAccompaniment: boolean; @@ -47,18 +53,31 @@ export class StructureDto { @ArrayNotEmpty() publics: string[]; + + @ApiProperty({ required: true }) @IsNotEmpty() freeWorkShop: boolean | string; + + @ApiProperty({ required: true }) @IsNotEmpty() nbComputers: number; + + @ApiProperty({ required: true }) @IsNotEmpty() nbPrinters: number; + + @ApiProperty({ required: true }) @IsNotEmpty() nbTablets: number; + + @ApiProperty({ required: true }) @IsNotEmpty() nbNumericTerminal: number; + + @ApiProperty({ required: true }) @IsNotEmpty() nbScanners: number; + exceptionalClosures: string; equipmentsAndServices: string[]; hours: Week; diff --git a/src/structures/dto/update-structure.dto.ts b/src/structures/dto/update-structure.dto.ts new file mode 100644 index 0000000000000000000000000000000000000000..2ab2e9f86e156725418a394863645b8ff64299ea --- /dev/null +++ b/src/structures/dto/update-structure.dto.ts @@ -0,0 +1,4 @@ +import { PartialType } from '@nestjs/mapped-types'; +import { StructureDto } from './structure.dto'; + +export class UpdateStructureDto extends PartialType(StructureDto) {} diff --git a/src/structures/services/structure.service.spec.ts b/src/structures/services/structure.service.spec.ts index 4ce08450dbf66434c2d17285a61dab2ee140ff41..d71dfb428f4963104e3868fe39b597833baa6390 100644 --- a/src/structures/services/structure.service.spec.ts +++ b/src/structures/services/structure.service.spec.ts @@ -85,7 +85,7 @@ describe('StructuresService', () => { time: [ { closing: '12:30', - opening: '9:00', + opening: '09:00', }, { closing: '17:00', @@ -98,7 +98,7 @@ describe('StructuresService', () => { time: [ { closing: '12:30', - opening: '9:00', + opening: '09:00', }, { closing: '17:00', @@ -111,7 +111,7 @@ describe('StructuresService', () => { time: [ { closing: '12:30', - opening: '9:00', + opening: '09:00', }, { closing: '17:00', @@ -124,7 +124,7 @@ describe('StructuresService', () => { time: [ { closing: '12:30', - opening: '9:00', + opening: '09:00', }, { closing: '17:00', @@ -137,7 +137,7 @@ describe('StructuresService', () => { time: [ { closing: '12:30', - opening: '9:00', + opening: '09:00', }, ], }, @@ -326,7 +326,7 @@ describe('StructuresService', () => { time: [ { closing: '12:30', - opening: '9:00', + opening: '09:00', }, { closing: '17:00', diff --git a/src/structures/services/structures-search.service.ts b/src/structures/services/structures-search.service.ts index 2bac91fe10710cceda2d97811cc602fe5bac4e7f..6356387af587430804cef421e383eb51af1679cf 100644 --- a/src/structures/services/structures-search.service.ts +++ b/src/structures/services/structures-search.service.ts @@ -1,7 +1,6 @@ import { Injectable, Logger } from '@nestjs/common'; import { ElasticsearchService } from '@nestjs/elasticsearch'; -import { StructureDto } from '../dto/structure.dto'; -import { StructureDocument } from '../schemas/structure.schema'; +import { Structure, StructureDocument } from '../schemas/structure.schema'; import { StructureSearchBody } from '../interfaces/structure-search-body.interface'; import { StructureSearchResult } from '../interfaces/structure-search-response.interface'; @@ -144,7 +143,7 @@ export class StructuresSearchService { return sortedHits.map((item) => item._source); } - public async update(structure: StructureDto, id: string): Promise<any> { + public async update(structure: Structure, id: string): Promise<any> { this.logger.debug('update'); return this.elasticsearchService.update({ index: this.index, diff --git a/src/structures/services/structures.service.ts b/src/structures/services/structures.service.ts index 65408fe276248b91e3345093ccb04d3b7fdf1a37..3407a3d5fd1b3cc12a8806832189ef31d3b8d325 100644 --- a/src/structures/services/structures.service.ts +++ b/src/structures/services/structures.service.ts @@ -23,6 +23,7 @@ import { UsersService } from '../../users/services/users.service'; import { PhotonResponse } from '../common/photonResponse.type'; import { depRegex } from '../common/regex'; import { StructureDto } from '../dto/structure.dto'; +import { UpdateStructureDto } from '../dto/update-structure.dto'; import { Structure, StructureDocument } from '../schemas/structure.schema'; import { StructuresSearchService } from './structures-search.service'; @@ -169,6 +170,11 @@ export class StructuresService { } } + /** + * Parse equipments. Ex : if structure doesn't have computers but nbComputer changes, then the key is added to equipmentsAndServices + * @param structure + * @returns Structure + */ public addEquipmentsCategories(structure: Structure): Structure { Logger.debug(`addEquipmentsCategories of ${structure.structureName}`, StructuresService.name); if (structure.nbComputers > 0) { @@ -363,26 +369,29 @@ export class StructuresService { }); } - public async update(idStructure: string, structure: StructureDto): Promise<Structure> { + public async update(idStructure: string, updatedFields: UpdateStructureDto): Promise<Structure> { const oldStructure = await this.findOne(idStructure); - if (!_.isEqual(oldStructure.address, structure.address)) { - await this.getStructurePosition(structure).then(); + const deepClone = Object.assign(oldStructure, updatedFields); + + if (!_.isEqual(oldStructure.address, updatedFields.address)) { + await this.getStructurePosition(deepClone).then(); } - // Parse equipments - structure = this.addEquipmentsCategories(structure); - const result = await this.structureModel.findByIdAndUpdate(Types.ObjectId(idStructure), structure).exec(); + const parsedStructure = this.addEquipmentsCategories(deepClone); + + const result = await this.structureModel.findByIdAndUpdate(Types.ObjectId(idStructure), parsedStructure).exec(); if (!result) { throw new HttpException('Invalid structure id', HttpStatus.BAD_REQUEST); - } else { - await this.structuresSearchService.update(structure, idStructure); - this.sendAdminStructureNotification( - result, - this.mailerService.config.templates.structureModificationNotification.ejs, - this.mailerService.config.templates.structureModificationNotification.json - ); - this.userService.removeOutdatedStructureFromArray(idStructure); } - return this.findOne(idStructure); + const responseStructure = await this.findOne(idStructure); + await this.structuresSearchService.update(responseStructure, idStructure); + this.sendAdminStructureNotification( + result, + this.mailerService.config.templates.structureModificationNotification.ejs, + this.mailerService.config.templates.structureModificationNotification.json + ); + this.userService.removeOutdatedStructureFromArray(idStructure); + + return responseStructure; } public async findOne(idParam: string): Promise<StructureDocument> { diff --git a/src/structures/structures.controller.ts b/src/structures/structures.controller.ts index 446cad22e95298afd5e8631c3d70b1f193c5a38b..5cf6f71cef4074a2e7bc5dd4a57d2b052fb2d579 100644 --- a/src/structures/structures.controller.ts +++ b/src/structures/structures.controller.ts @@ -8,12 +8,13 @@ import { HttpStatus, Logger, Param, + Patch, Post, Put, Query, UseGuards, } from '@nestjs/common'; -import { ApiParam, ApiTags } from '@nestjs/swagger'; +import { ApiOperation, ApiParam, ApiTags } from '@nestjs/swagger'; import { Types } from 'mongoose'; import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard'; import { CategoriesAccompagnementService } from '../categories/services/categories-accompagnement.service'; @@ -29,7 +30,7 @@ import { UsersService } from '../users/services/users.service'; import { depRegex } from './common/regex'; import { CreateStructureDto } from './dto/create-structure.dto'; import { QueryStructure } from './dto/query-structure.dto'; -import { StructureDto } from './dto/structure.dto'; +import { UpdateStructureDto } from './dto/update-structure.dto'; import { Structure, StructureDocument } from './schemas/structure.schema'; import { StructuresService } from './services/structures.service'; @@ -98,10 +99,11 @@ export class StructuresController { return this.structureService.updateAccountVerified(id); } - @Put(':id') + @ApiOperation({ summary: 'Patch one value or more of a structure' }) + @Patch(':id') @UseGuards(JwtAuthGuard, IsStructureOwnerGuard) @Roles('admin') - public async update(@Param('id') id: string, @Body() body: StructureDto): Promise<Structure> { + public async update(@Param('id') id: string, @Body() body: UpdateStructureDto): Promise<Structure> { return this.structureService.update(id, body); } diff --git a/test/mock/services/structures.mock.service.ts b/test/mock/services/structures.mock.service.ts index e63ca4aea439421592318e3ce45a9849433e1602..c0ee416e3a95c1e84f4c0089234e386d78096a59 100644 --- a/test/mock/services/structures.mock.service.ts +++ b/test/mock/services/structures.mock.service.ts @@ -124,7 +124,7 @@ export class StructuresServiceMock { time: [ { closing: '12:30', - opening: '9:00', + opening: '09:00', }, { closing: '17:00', @@ -137,7 +137,7 @@ export class StructuresServiceMock { time: [ { closing: '12:30', - opening: '9:00', + opening: '09:00', }, { closing: '17:00', @@ -150,7 +150,7 @@ export class StructuresServiceMock { time: [ { closing: '12:30', - opening: '9:00', + opening: '09:00', }, { closing: '17:00', @@ -163,7 +163,7 @@ export class StructuresServiceMock { time: [ { closing: '12:30', - opening: '9:00', + opening: '09:00', }, { closing: '17:00', @@ -176,7 +176,7 @@ export class StructuresServiceMock { time: [ { closing: '12:30', - opening: '9:00', + opening: '09:00', }, ], }, @@ -251,7 +251,7 @@ export class StructuresServiceMock { time: [ { closing: '12:30', - opening: '9:00', + opening: '09:00', }, { closing: '17:00', @@ -264,7 +264,7 @@ export class StructuresServiceMock { time: [ { closing: '12:30', - opening: '9:00', + opening: '09:00', }, { closing: '17:00', @@ -277,7 +277,7 @@ export class StructuresServiceMock { time: [ { closing: '12:30', - opening: '9:00', + opening: '09:00', }, { closing: '17:00', @@ -290,7 +290,7 @@ export class StructuresServiceMock { time: [ { closing: '12:30', - opening: '9:00', + opening: '09:00', }, { closing: '17:00', @@ -303,7 +303,7 @@ export class StructuresServiceMock { time: [ { closing: '12:30', - opening: '9:00', + opening: '09:00', }, ], },