Artteiv commited on
Commit
2fc4f90
·
1 Parent(s): 08582b8

feat: add feeds

Browse files
backend/package-lock.json CHANGED
@@ -22,6 +22,7 @@
22
  "dotenv": "^16.4.5",
23
  "mysql2": "^3.11.3",
24
  "nest-access-control": "^3.1.0",
 
25
  "pg": "^8.13.0",
26
  "reflect-metadata": "^0.2.0",
27
  "rxjs": "^7.8.1",
@@ -906,6 +907,45 @@
906
  "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
907
  }
908
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
909
  "node_modules/@humanwhocodes/config-array": {
910
  "version": "0.13.0",
911
  "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz",
@@ -1603,6 +1643,13 @@
1603
  "semver": "bin/semver.js"
1604
  }
1605
  },
 
 
 
 
 
 
 
1606
  "node_modules/@nestjs/cli": {
1607
  "version": "10.4.5",
1608
  "resolved": "https://registry.npmjs.org/@nestjs/cli/-/cli-10.4.5.tgz",
@@ -1815,6 +1862,40 @@
1815
  "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==",
1816
  "dev": true
1817
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1818
  "node_modules/@nestjs/testing": {
1819
  "version": "10.4.3",
1820
  "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-10.4.3.tgz",
@@ -2597,6 +2678,13 @@
2597
  "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
2598
  "license": "ISC"
2599
  },
 
 
 
 
 
 
 
2600
  "node_modules/accepts": {
2601
  "version": "1.3.8",
2602
  "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
@@ -2676,7 +2764,6 @@
2676
  "version": "8.12.0",
2677
  "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
2678
  "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
2679
- "dev": true,
2680
  "dependencies": {
2681
  "fast-deep-equal": "^3.1.1",
2682
  "json-schema-traverse": "^1.0.0",
@@ -2692,7 +2779,6 @@
2692
  "version": "2.1.1",
2693
  "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
2694
  "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
2695
- "dev": true,
2696
  "dependencies": {
2697
  "ajv": "^8.0.0"
2698
  },
@@ -2849,8 +2935,7 @@
2849
  "node_modules/argparse": {
2850
  "version": "2.0.1",
2851
  "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
2852
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
2853
- "dev": true
2854
  },
2855
  "node_modules/array-flatten": {
2856
  "version": "1.1.1",
@@ -2881,6 +2966,27 @@
2881
  "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
2882
  "dev": true
2883
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2884
  "node_modules/aws-ssl-profiles": {
2885
  "version": "1.1.2",
2886
  "resolved": "https://registry.npmjs.org/aws-ssl-profiles/-/aws-ssl-profiles-1.1.2.tgz",
@@ -4542,11 +4648,24 @@
4542
  "node": ">=4"
4543
  }
4544
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4545
  "node_modules/fast-deep-equal": {
4546
  "version": "3.1.3",
4547
  "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
4548
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
4549
- "dev": true
4550
  },
4551
  "node_modules/fast-diff": {
4552
  "version": "1.3.0",
@@ -4576,22 +4695,117 @@
4576
  "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
4577
  "dev": true
4578
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4579
  "node_modules/fast-levenshtein": {
4580
  "version": "2.0.6",
4581
  "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
4582
  "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
4583
  "dev": true
4584
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4585
  "node_modules/fast-safe-stringify": {
4586
  "version": "2.1.1",
4587
  "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
4588
  "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA=="
4589
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4590
  "node_modules/fastq": {
4591
  "version": "1.17.1",
4592
  "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
4593
  "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
4594
- "dev": true,
4595
  "dependencies": {
4596
  "reusify": "^1.0.4"
4597
  }
@@ -4704,6 +4918,21 @@
4704
  "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
4705
  "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
4706
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4707
  "node_modules/find-up": {
4708
  "version": "5.0.0",
4709
  "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
@@ -6310,7 +6539,6 @@
6310
  "version": "4.1.0",
6311
  "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
6312
  "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
6313
- "dev": true,
6314
  "dependencies": {
6315
  "argparse": "^2.0.1"
6316
  },
@@ -6342,11 +6570,20 @@
6342
  "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
6343
  "dev": true
6344
  },
 
 
 
 
 
 
 
 
 
 
6345
  "node_modules/json-schema-traverse": {
6346
  "version": "1.0.0",
6347
  "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
6348
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
6349
- "dev": true
6350
  },
6351
  "node_modules/json-stable-stringify-without-jsonify": {
6352
  "version": "1.0.1",
@@ -6473,6 +6710,28 @@
6473
  "integrity": "sha512-QkJn9/D7zZ1ucvT++TQSvZuSA2xAWeUytU+DiEQwbPKLyrDpvbul2AFs1CGbRAPpSCCk47aRAb5DX5mmcayp4g==",
6474
  "license": "MIT"
6475
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6476
  "node_modules/lines-and-columns": {
6477
  "version": "1.2.4",
6478
  "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
@@ -6960,6 +7219,22 @@
6960
  }
6961
  }
6962
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6963
  "node_modules/node-abort-controller": {
6964
  "version": "3.1.1",
6965
  "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz",
@@ -7086,6 +7361,16 @@
7086
  "url": "https://github.com/sponsors/ljharb"
7087
  }
7088
  },
 
 
 
 
 
 
 
 
 
 
7089
  "node_modules/on-finished": {
7090
  "version": "2.4.1",
7091
  "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
@@ -7441,6 +7726,53 @@
7441
  "url": "https://github.com/sponsors/jonschlinkert"
7442
  }
7443
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7444
  "node_modules/pirates": {
7445
  "version": "4.0.6",
7446
  "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
@@ -7629,6 +7961,13 @@
7629
  "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
7630
  "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
7631
  },
 
 
 
 
 
 
 
7632
  "node_modules/prompts": {
7633
  "version": "2.4.2",
7634
  "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
@@ -7658,7 +7997,6 @@
7658
  "version": "2.3.1",
7659
  "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
7660
  "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
7661
- "dev": true,
7662
  "engines": {
7663
  "node": ">=6"
7664
  }
@@ -7713,6 +8051,13 @@
7713
  }
7714
  ]
7715
  },
 
 
 
 
 
 
 
7716
  "node_modules/randombytes": {
7717
  "version": "2.1.0",
7718
  "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
@@ -7793,6 +8138,16 @@
7793
  "url": "https://github.com/sponsors/jonschlinkert"
7794
  }
7795
  },
 
 
 
 
 
 
 
 
 
 
7796
  "node_modules/reflect-metadata": {
7797
  "version": "0.2.2",
7798
  "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz",
@@ -7819,7 +8174,6 @@
7819
  "version": "2.0.2",
7820
  "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
7821
  "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
7822
- "dev": true,
7823
  "engines": {
7824
  "node": ">=0.10.0"
7825
  }
@@ -7899,16 +8253,32 @@
7899
  "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
7900
  "dev": true
7901
  },
 
 
 
 
 
 
 
 
 
 
7902
  "node_modules/reusify": {
7903
  "version": "1.0.4",
7904
  "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
7905
  "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
7906
- "dev": true,
7907
  "engines": {
7908
  "iojs": ">=1.0.0",
7909
  "node": ">=0.10.0"
7910
  }
7911
  },
 
 
 
 
 
 
 
7912
  "node_modules/rimraf": {
7913
  "version": "3.0.2",
7914
  "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
@@ -8023,6 +8393,26 @@
8023
  }
8024
  ]
8025
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8026
  "node_modules/safer-buffer": {
8027
  "version": "2.1.2",
8028
  "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
@@ -8077,6 +8467,13 @@
8077
  "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
8078
  "dev": true
8079
  },
 
 
 
 
 
 
 
8080
  "node_modules/semver": {
8081
  "version": "7.6.3",
8082
  "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
@@ -8166,6 +8563,13 @@
8166
  "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==",
8167
  "license": "ISC"
8168
  },
 
 
 
 
 
 
 
8169
  "node_modules/set-function-length": {
8170
  "version": "1.2.2",
8171
  "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
@@ -8261,6 +8665,16 @@
8261
  "node": ">=8"
8262
  }
8263
  },
 
 
 
 
 
 
 
 
 
 
8264
  "node_modules/source-map": {
8265
  "version": "0.7.4",
8266
  "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
@@ -8523,6 +8937,13 @@
8523
  "url": "https://github.com/sponsors/ljharb"
8524
  }
8525
  },
 
 
 
 
 
 
 
8526
  "node_modules/symbol-observable": {
8527
  "version": "4.0.0",
8528
  "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz",
@@ -8770,6 +9191,16 @@
8770
  "node": ">=0.8"
8771
  }
8772
  },
 
 
 
 
 
 
 
 
 
 
8773
  "node_modules/through": {
8774
  "version": "2.3.8",
8775
  "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
@@ -8815,6 +9246,16 @@
8815
  "node": ">=8.0"
8816
  }
8817
  },
 
 
 
 
 
 
 
 
 
 
8818
  "node_modules/toidentifier": {
8819
  "version": "1.0.1",
8820
  "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
@@ -9275,7 +9716,6 @@
9275
  "version": "4.4.1",
9276
  "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
9277
  "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
9278
- "dev": true,
9279
  "dependencies": {
9280
  "punycode": "^2.1.0"
9281
  }
 
22
  "dotenv": "^16.4.5",
23
  "mysql2": "^3.11.3",
24
  "nest-access-control": "^3.1.0",
25
+ "nestjs-paginate": "^9.3.0",
26
  "pg": "^8.13.0",
27
  "reflect-metadata": "^0.2.0",
28
  "rxjs": "^7.8.1",
 
907
  "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
908
  }
909
  },
910
+ "node_modules/@fastify/ajv-compiler": {
911
+ "version": "3.6.0",
912
+ "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-3.6.0.tgz",
913
+ "integrity": "sha512-LwdXQJjmMD+GwLOkP7TVC68qa+pSSogeWWmznRJ/coyTcfe9qA05AHFSe1eZFwK6q+xVRpChnvFUkf1iYaSZsQ==",
914
+ "license": "MIT",
915
+ "peer": true,
916
+ "dependencies": {
917
+ "ajv": "^8.11.0",
918
+ "ajv-formats": "^2.1.1",
919
+ "fast-uri": "^2.0.0"
920
+ }
921
+ },
922
+ "node_modules/@fastify/error": {
923
+ "version": "3.4.1",
924
+ "resolved": "https://registry.npmjs.org/@fastify/error/-/error-3.4.1.tgz",
925
+ "integrity": "sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ==",
926
+ "license": "MIT",
927
+ "peer": true
928
+ },
929
+ "node_modules/@fastify/fast-json-stringify-compiler": {
930
+ "version": "4.3.0",
931
+ "resolved": "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-4.3.0.tgz",
932
+ "integrity": "sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==",
933
+ "license": "MIT",
934
+ "peer": true,
935
+ "dependencies": {
936
+ "fast-json-stringify": "^5.7.0"
937
+ }
938
+ },
939
+ "node_modules/@fastify/merge-json-schemas": {
940
+ "version": "0.1.1",
941
+ "resolved": "https://registry.npmjs.org/@fastify/merge-json-schemas/-/merge-json-schemas-0.1.1.tgz",
942
+ "integrity": "sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA==",
943
+ "license": "MIT",
944
+ "peer": true,
945
+ "dependencies": {
946
+ "fast-deep-equal": "^3.1.3"
947
+ }
948
+ },
949
  "node_modules/@humanwhocodes/config-array": {
950
  "version": "0.13.0",
951
  "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz",
 
1643
  "semver": "bin/semver.js"
1644
  }
1645
  },
1646
+ "node_modules/@microsoft/tsdoc": {
1647
+ "version": "0.15.0",
1648
+ "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.15.0.tgz",
1649
+ "integrity": "sha512-HZpPoABogPvjeJOdzCOSJsXeL/SMCBgBZMVC3X3d7YYp2gf31MfxhUoYUNwf1ERPJOnQc0wkFn9trqI6ZEdZuA==",
1650
+ "license": "MIT",
1651
+ "peer": true
1652
+ },
1653
  "node_modules/@nestjs/cli": {
1654
  "version": "10.4.5",
1655
  "resolved": "https://registry.npmjs.org/@nestjs/cli/-/cli-10.4.5.tgz",
 
1862
  "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==",
1863
  "dev": true
1864
  },
1865
+ "node_modules/@nestjs/swagger": {
1866
+ "version": "7.4.2",
1867
+ "resolved": "https://registry.npmjs.org/@nestjs/swagger/-/swagger-7.4.2.tgz",
1868
+ "integrity": "sha512-Mu6TEn1M/owIvAx2B4DUQObQXqo2028R2s9rSZ/hJEgBK95+doTwS0DjmVA2wTeZTyVtXOoN7CsoM5pONBzvKQ==",
1869
+ "license": "MIT",
1870
+ "peer": true,
1871
+ "dependencies": {
1872
+ "@microsoft/tsdoc": "^0.15.0",
1873
+ "@nestjs/mapped-types": "2.0.5",
1874
+ "js-yaml": "4.1.0",
1875
+ "lodash": "4.17.21",
1876
+ "path-to-regexp": "3.3.0",
1877
+ "swagger-ui-dist": "5.17.14"
1878
+ },
1879
+ "peerDependencies": {
1880
+ "@fastify/static": "^6.0.0 || ^7.0.0",
1881
+ "@nestjs/common": "^9.0.0 || ^10.0.0",
1882
+ "@nestjs/core": "^9.0.0 || ^10.0.0",
1883
+ "class-transformer": "*",
1884
+ "class-validator": "*",
1885
+ "reflect-metadata": "^0.1.12 || ^0.2.0"
1886
+ },
1887
+ "peerDependenciesMeta": {
1888
+ "@fastify/static": {
1889
+ "optional": true
1890
+ },
1891
+ "class-transformer": {
1892
+ "optional": true
1893
+ },
1894
+ "class-validator": {
1895
+ "optional": true
1896
+ }
1897
+ }
1898
+ },
1899
  "node_modules/@nestjs/testing": {
1900
  "version": "10.4.3",
1901
  "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-10.4.3.tgz",
 
2678
  "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
2679
  "license": "ISC"
2680
  },
2681
+ "node_modules/abstract-logging": {
2682
+ "version": "2.0.1",
2683
+ "resolved": "https://registry.npmjs.org/abstract-logging/-/abstract-logging-2.0.1.tgz",
2684
+ "integrity": "sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==",
2685
+ "license": "MIT",
2686
+ "peer": true
2687
+ },
2688
  "node_modules/accepts": {
2689
  "version": "1.3.8",
2690
  "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
 
2764
  "version": "8.12.0",
2765
  "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
2766
  "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
 
2767
  "dependencies": {
2768
  "fast-deep-equal": "^3.1.1",
2769
  "json-schema-traverse": "^1.0.0",
 
2779
  "version": "2.1.1",
2780
  "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
2781
  "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
 
2782
  "dependencies": {
2783
  "ajv": "^8.0.0"
2784
  },
 
2935
  "node_modules/argparse": {
2936
  "version": "2.0.1",
2937
  "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
2938
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
 
2939
  },
2940
  "node_modules/array-flatten": {
2941
  "version": "1.1.1",
 
2966
  "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
2967
  "dev": true
2968
  },
2969
+ "node_modules/atomic-sleep": {
2970
+ "version": "1.0.0",
2971
+ "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz",
2972
+ "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==",
2973
+ "license": "MIT",
2974
+ "peer": true,
2975
+ "engines": {
2976
+ "node": ">=8.0.0"
2977
+ }
2978
+ },
2979
+ "node_modules/avvio": {
2980
+ "version": "8.4.0",
2981
+ "resolved": "https://registry.npmjs.org/avvio/-/avvio-8.4.0.tgz",
2982
+ "integrity": "sha512-CDSwaxINFy59iNwhYnkvALBwZiTydGkOecZyPkqBpABYR1KqGEsET0VOOYDwtleZSUIdeY36DC2bSZ24CO1igA==",
2983
+ "license": "MIT",
2984
+ "peer": true,
2985
+ "dependencies": {
2986
+ "@fastify/error": "^3.3.0",
2987
+ "fastq": "^1.17.1"
2988
+ }
2989
+ },
2990
  "node_modules/aws-ssl-profiles": {
2991
  "version": "1.1.2",
2992
  "resolved": "https://registry.npmjs.org/aws-ssl-profiles/-/aws-ssl-profiles-1.1.2.tgz",
 
4648
  "node": ">=4"
4649
  }
4650
  },
4651
+ "node_modules/fast-content-type-parse": {
4652
+ "version": "1.1.0",
4653
+ "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-1.1.0.tgz",
4654
+ "integrity": "sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ==",
4655
+ "license": "MIT",
4656
+ "peer": true
4657
+ },
4658
+ "node_modules/fast-decode-uri-component": {
4659
+ "version": "1.0.1",
4660
+ "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz",
4661
+ "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==",
4662
+ "license": "MIT",
4663
+ "peer": true
4664
+ },
4665
  "node_modules/fast-deep-equal": {
4666
  "version": "3.1.3",
4667
  "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
4668
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
 
4669
  },
4670
  "node_modules/fast-diff": {
4671
  "version": "1.3.0",
 
4695
  "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
4696
  "dev": true
4697
  },
4698
+ "node_modules/fast-json-stringify": {
4699
+ "version": "5.16.1",
4700
+ "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-5.16.1.tgz",
4701
+ "integrity": "sha512-KAdnLvy1yu/XrRtP+LJnxbBGrhN+xXu+gt3EUvZhYGKCr3lFHq/7UFJHHFgmJKoqlh6B40bZLEv7w46B0mqn1g==",
4702
+ "license": "MIT",
4703
+ "peer": true,
4704
+ "dependencies": {
4705
+ "@fastify/merge-json-schemas": "^0.1.0",
4706
+ "ajv": "^8.10.0",
4707
+ "ajv-formats": "^3.0.1",
4708
+ "fast-deep-equal": "^3.1.3",
4709
+ "fast-uri": "^2.1.0",
4710
+ "json-schema-ref-resolver": "^1.0.1",
4711
+ "rfdc": "^1.2.0"
4712
+ }
4713
+ },
4714
+ "node_modules/fast-json-stringify/node_modules/ajv-formats": {
4715
+ "version": "3.0.1",
4716
+ "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz",
4717
+ "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==",
4718
+ "license": "MIT",
4719
+ "peer": true,
4720
+ "dependencies": {
4721
+ "ajv": "^8.0.0"
4722
+ },
4723
+ "peerDependencies": {
4724
+ "ajv": "^8.0.0"
4725
+ },
4726
+ "peerDependenciesMeta": {
4727
+ "ajv": {
4728
+ "optional": true
4729
+ }
4730
+ }
4731
+ },
4732
  "node_modules/fast-levenshtein": {
4733
  "version": "2.0.6",
4734
  "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
4735
  "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
4736
  "dev": true
4737
  },
4738
+ "node_modules/fast-querystring": {
4739
+ "version": "1.1.2",
4740
+ "resolved": "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.1.2.tgz",
4741
+ "integrity": "sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==",
4742
+ "license": "MIT",
4743
+ "peer": true,
4744
+ "dependencies": {
4745
+ "fast-decode-uri-component": "^1.0.1"
4746
+ }
4747
+ },
4748
+ "node_modules/fast-redact": {
4749
+ "version": "3.5.0",
4750
+ "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz",
4751
+ "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==",
4752
+ "license": "MIT",
4753
+ "peer": true,
4754
+ "engines": {
4755
+ "node": ">=6"
4756
+ }
4757
+ },
4758
  "node_modules/fast-safe-stringify": {
4759
  "version": "2.1.1",
4760
  "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
4761
  "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA=="
4762
  },
4763
+ "node_modules/fast-uri": {
4764
+ "version": "2.4.0",
4765
+ "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-2.4.0.tgz",
4766
+ "integrity": "sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA==",
4767
+ "license": "MIT",
4768
+ "peer": true
4769
+ },
4770
+ "node_modules/fastify": {
4771
+ "version": "4.28.1",
4772
+ "resolved": "https://registry.npmjs.org/fastify/-/fastify-4.28.1.tgz",
4773
+ "integrity": "sha512-kFWUtpNr4i7t5vY2EJPCN2KgMVpuqfU4NjnJNCgiNB900oiDeYqaNDRcAfeBbOF5hGixixxcKnOU4KN9z6QncQ==",
4774
+ "funding": [
4775
+ {
4776
+ "type": "github",
4777
+ "url": "https://github.com/sponsors/fastify"
4778
+ },
4779
+ {
4780
+ "type": "opencollective",
4781
+ "url": "https://opencollective.com/fastify"
4782
+ }
4783
+ ],
4784
+ "license": "MIT",
4785
+ "peer": true,
4786
+ "dependencies": {
4787
+ "@fastify/ajv-compiler": "^3.5.0",
4788
+ "@fastify/error": "^3.4.0",
4789
+ "@fastify/fast-json-stringify-compiler": "^4.3.0",
4790
+ "abstract-logging": "^2.0.1",
4791
+ "avvio": "^8.3.0",
4792
+ "fast-content-type-parse": "^1.1.0",
4793
+ "fast-json-stringify": "^5.8.0",
4794
+ "find-my-way": "^8.0.0",
4795
+ "light-my-request": "^5.11.0",
4796
+ "pino": "^9.0.0",
4797
+ "process-warning": "^3.0.0",
4798
+ "proxy-addr": "^2.0.7",
4799
+ "rfdc": "^1.3.0",
4800
+ "secure-json-parse": "^2.7.0",
4801
+ "semver": "^7.5.4",
4802
+ "toad-cache": "^3.3.0"
4803
+ }
4804
+ },
4805
  "node_modules/fastq": {
4806
  "version": "1.17.1",
4807
  "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
4808
  "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
 
4809
  "dependencies": {
4810
  "reusify": "^1.0.4"
4811
  }
 
4918
  "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
4919
  "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
4920
  },
4921
+ "node_modules/find-my-way": {
4922
+ "version": "8.2.2",
4923
+ "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-8.2.2.tgz",
4924
+ "integrity": "sha512-Dobi7gcTEq8yszimcfp/R7+owiT4WncAJ7VTTgFH1jYJ5GaG1FbhjwDG820hptN0QDFvzVY3RfCzdInvGPGzjA==",
4925
+ "license": "MIT",
4926
+ "peer": true,
4927
+ "dependencies": {
4928
+ "fast-deep-equal": "^3.1.3",
4929
+ "fast-querystring": "^1.0.0",
4930
+ "safe-regex2": "^3.1.0"
4931
+ },
4932
+ "engines": {
4933
+ "node": ">=14"
4934
+ }
4935
+ },
4936
  "node_modules/find-up": {
4937
  "version": "5.0.0",
4938
  "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
 
6539
  "version": "4.1.0",
6540
  "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
6541
  "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
 
6542
  "dependencies": {
6543
  "argparse": "^2.0.1"
6544
  },
 
6570
  "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
6571
  "dev": true
6572
  },
6573
+ "node_modules/json-schema-ref-resolver": {
6574
+ "version": "1.0.1",
6575
+ "resolved": "https://registry.npmjs.org/json-schema-ref-resolver/-/json-schema-ref-resolver-1.0.1.tgz",
6576
+ "integrity": "sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw==",
6577
+ "license": "MIT",
6578
+ "peer": true,
6579
+ "dependencies": {
6580
+ "fast-deep-equal": "^3.1.3"
6581
+ }
6582
+ },
6583
  "node_modules/json-schema-traverse": {
6584
  "version": "1.0.0",
6585
  "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
6586
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
 
6587
  },
6588
  "node_modules/json-stable-stringify-without-jsonify": {
6589
  "version": "1.0.1",
 
6710
  "integrity": "sha512-QkJn9/D7zZ1ucvT++TQSvZuSA2xAWeUytU+DiEQwbPKLyrDpvbul2AFs1CGbRAPpSCCk47aRAb5DX5mmcayp4g==",
6711
  "license": "MIT"
6712
  },
6713
+ "node_modules/light-my-request": {
6714
+ "version": "5.14.0",
6715
+ "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-5.14.0.tgz",
6716
+ "integrity": "sha512-aORPWntbpH5esaYpGOOmri0OHDOe3wC5M2MQxZ9dvMLZm6DnaAn0kJlcbU9hwsQgLzmZyReKwFwwPkR+nHu5kA==",
6717
+ "license": "BSD-3-Clause",
6718
+ "peer": true,
6719
+ "dependencies": {
6720
+ "cookie": "^0.7.0",
6721
+ "process-warning": "^3.0.0",
6722
+ "set-cookie-parser": "^2.4.1"
6723
+ }
6724
+ },
6725
+ "node_modules/light-my-request/node_modules/cookie": {
6726
+ "version": "0.7.2",
6727
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
6728
+ "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
6729
+ "license": "MIT",
6730
+ "peer": true,
6731
+ "engines": {
6732
+ "node": ">= 0.6"
6733
+ }
6734
+ },
6735
  "node_modules/lines-and-columns": {
6736
  "version": "1.2.4",
6737
  "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
 
7219
  }
7220
  }
7221
  },
7222
+ "node_modules/nestjs-paginate": {
7223
+ "version": "9.3.0",
7224
+ "resolved": "https://registry.npmjs.org/nestjs-paginate/-/nestjs-paginate-9.3.0.tgz",
7225
+ "integrity": "sha512-wqg7qzH0Li19oS0X9eN5n1r37adlZiUwcZM9QJ8iIdMyDAG/faD8U5uUgqOd+hGhBbIOgat5yRGNxfW4UlXhSw==",
7226
+ "license": "MIT",
7227
+ "dependencies": {
7228
+ "lodash": "^4.17.21"
7229
+ },
7230
+ "peerDependencies": {
7231
+ "@nestjs/common": "^10.0.0",
7232
+ "@nestjs/swagger": "^7.0.0",
7233
+ "express": "^4.0.0",
7234
+ "fastify": "^4.0.0",
7235
+ "typeorm": "^0.3.17"
7236
+ }
7237
+ },
7238
  "node_modules/node-abort-controller": {
7239
  "version": "3.1.1",
7240
  "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz",
 
7361
  "url": "https://github.com/sponsors/ljharb"
7362
  }
7363
  },
7364
+ "node_modules/on-exit-leak-free": {
7365
+ "version": "2.1.2",
7366
+ "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz",
7367
+ "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==",
7368
+ "license": "MIT",
7369
+ "peer": true,
7370
+ "engines": {
7371
+ "node": ">=14.0.0"
7372
+ }
7373
+ },
7374
  "node_modules/on-finished": {
7375
  "version": "2.4.1",
7376
  "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
 
7726
  "url": "https://github.com/sponsors/jonschlinkert"
7727
  }
7728
  },
7729
+ "node_modules/pino": {
7730
+ "version": "9.5.0",
7731
+ "resolved": "https://registry.npmjs.org/pino/-/pino-9.5.0.tgz",
7732
+ "integrity": "sha512-xSEmD4pLnV54t0NOUN16yCl7RIB1c5UUOse5HSyEXtBp+FgFQyPeDutc+Q2ZO7/22vImV7VfEjH/1zV2QuqvYw==",
7733
+ "license": "MIT",
7734
+ "peer": true,
7735
+ "dependencies": {
7736
+ "atomic-sleep": "^1.0.0",
7737
+ "fast-redact": "^3.1.1",
7738
+ "on-exit-leak-free": "^2.1.0",
7739
+ "pino-abstract-transport": "^2.0.0",
7740
+ "pino-std-serializers": "^7.0.0",
7741
+ "process-warning": "^4.0.0",
7742
+ "quick-format-unescaped": "^4.0.3",
7743
+ "real-require": "^0.2.0",
7744
+ "safe-stable-stringify": "^2.3.1",
7745
+ "sonic-boom": "^4.0.1",
7746
+ "thread-stream": "^3.0.0"
7747
+ },
7748
+ "bin": {
7749
+ "pino": "bin.js"
7750
+ }
7751
+ },
7752
+ "node_modules/pino-abstract-transport": {
7753
+ "version": "2.0.0",
7754
+ "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz",
7755
+ "integrity": "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==",
7756
+ "license": "MIT",
7757
+ "peer": true,
7758
+ "dependencies": {
7759
+ "split2": "^4.0.0"
7760
+ }
7761
+ },
7762
+ "node_modules/pino-std-serializers": {
7763
+ "version": "7.0.0",
7764
+ "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz",
7765
+ "integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==",
7766
+ "license": "MIT",
7767
+ "peer": true
7768
+ },
7769
+ "node_modules/pino/node_modules/process-warning": {
7770
+ "version": "4.0.0",
7771
+ "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-4.0.0.tgz",
7772
+ "integrity": "sha512-/MyYDxttz7DfGMMHiysAsFE4qF+pQYAA8ziO/3NcRVrQ5fSk+Mns4QZA/oRPFzvcqNoVJXQNWNAsdwBXLUkQKw==",
7773
+ "license": "MIT",
7774
+ "peer": true
7775
+ },
7776
  "node_modules/pirates": {
7777
  "version": "4.0.6",
7778
  "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
 
7961
  "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
7962
  "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
7963
  },
7964
+ "node_modules/process-warning": {
7965
+ "version": "3.0.0",
7966
+ "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz",
7967
+ "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==",
7968
+ "license": "MIT",
7969
+ "peer": true
7970
+ },
7971
  "node_modules/prompts": {
7972
  "version": "2.4.2",
7973
  "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
 
7997
  "version": "2.3.1",
7998
  "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
7999
  "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
 
8000
  "engines": {
8001
  "node": ">=6"
8002
  }
 
8051
  }
8052
  ]
8053
  },
8054
+ "node_modules/quick-format-unescaped": {
8055
+ "version": "4.0.4",
8056
+ "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz",
8057
+ "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==",
8058
+ "license": "MIT",
8059
+ "peer": true
8060
+ },
8061
  "node_modules/randombytes": {
8062
  "version": "2.1.0",
8063
  "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
 
8138
  "url": "https://github.com/sponsors/jonschlinkert"
8139
  }
8140
  },
8141
+ "node_modules/real-require": {
8142
+ "version": "0.2.0",
8143
+ "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz",
8144
+ "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==",
8145
+ "license": "MIT",
8146
+ "peer": true,
8147
+ "engines": {
8148
+ "node": ">= 12.13.0"
8149
+ }
8150
+ },
8151
  "node_modules/reflect-metadata": {
8152
  "version": "0.2.2",
8153
  "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz",
 
8174
  "version": "2.0.2",
8175
  "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
8176
  "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
 
8177
  "engines": {
8178
  "node": ">=0.10.0"
8179
  }
 
8253
  "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
8254
  "dev": true
8255
  },
8256
+ "node_modules/ret": {
8257
+ "version": "0.4.3",
8258
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.4.3.tgz",
8259
+ "integrity": "sha512-0f4Memo5QP7WQyUEAYUO3esD/XjOc3Zjjg5CPsAq1p8sIu0XPeMbHJemKA0BO7tV0X7+A0FoEpbmHXWxPyD3wQ==",
8260
+ "license": "MIT",
8261
+ "peer": true,
8262
+ "engines": {
8263
+ "node": ">=10"
8264
+ }
8265
+ },
8266
  "node_modules/reusify": {
8267
  "version": "1.0.4",
8268
  "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
8269
  "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
 
8270
  "engines": {
8271
  "iojs": ">=1.0.0",
8272
  "node": ">=0.10.0"
8273
  }
8274
  },
8275
+ "node_modules/rfdc": {
8276
+ "version": "1.4.1",
8277
+ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz",
8278
+ "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==",
8279
+ "license": "MIT",
8280
+ "peer": true
8281
+ },
8282
  "node_modules/rimraf": {
8283
  "version": "3.0.2",
8284
  "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
 
8393
  }
8394
  ]
8395
  },
8396
+ "node_modules/safe-regex2": {
8397
+ "version": "3.1.0",
8398
+ "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-3.1.0.tgz",
8399
+ "integrity": "sha512-RAAZAGbap2kBfbVhvmnTFv73NWLMvDGOITFYTZBAaY8eR+Ir4ef7Up/e7amo+y1+AH+3PtLkrt9mvcTsG9LXug==",
8400
+ "license": "MIT",
8401
+ "peer": true,
8402
+ "dependencies": {
8403
+ "ret": "~0.4.0"
8404
+ }
8405
+ },
8406
+ "node_modules/safe-stable-stringify": {
8407
+ "version": "2.5.0",
8408
+ "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz",
8409
+ "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==",
8410
+ "license": "MIT",
8411
+ "peer": true,
8412
+ "engines": {
8413
+ "node": ">=10"
8414
+ }
8415
+ },
8416
  "node_modules/safer-buffer": {
8417
  "version": "2.1.2",
8418
  "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
 
8467
  "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
8468
  "dev": true
8469
  },
8470
+ "node_modules/secure-json-parse": {
8471
+ "version": "2.7.0",
8472
+ "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz",
8473
+ "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==",
8474
+ "license": "BSD-3-Clause",
8475
+ "peer": true
8476
+ },
8477
  "node_modules/semver": {
8478
  "version": "7.6.3",
8479
  "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
 
8563
  "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==",
8564
  "license": "ISC"
8565
  },
8566
+ "node_modules/set-cookie-parser": {
8567
+ "version": "2.7.1",
8568
+ "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz",
8569
+ "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==",
8570
+ "license": "MIT",
8571
+ "peer": true
8572
+ },
8573
  "node_modules/set-function-length": {
8574
  "version": "1.2.2",
8575
  "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
 
8665
  "node": ">=8"
8666
  }
8667
  },
8668
+ "node_modules/sonic-boom": {
8669
+ "version": "4.2.0",
8670
+ "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.0.tgz",
8671
+ "integrity": "sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==",
8672
+ "license": "MIT",
8673
+ "peer": true,
8674
+ "dependencies": {
8675
+ "atomic-sleep": "^1.0.0"
8676
+ }
8677
+ },
8678
  "node_modules/source-map": {
8679
  "version": "0.7.4",
8680
  "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
 
8937
  "url": "https://github.com/sponsors/ljharb"
8938
  }
8939
  },
8940
+ "node_modules/swagger-ui-dist": {
8941
+ "version": "5.17.14",
8942
+ "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.17.14.tgz",
8943
+ "integrity": "sha512-CVbSfaLpstV65OnSjbXfVd6Sta3q3F7Cj/yYuvHMp1P90LztOLs6PfUnKEVAeiIVQt9u2SaPwv0LiH/OyMjHRw==",
8944
+ "license": "Apache-2.0",
8945
+ "peer": true
8946
+ },
8947
  "node_modules/symbol-observable": {
8948
  "version": "4.0.0",
8949
  "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz",
 
9191
  "node": ">=0.8"
9192
  }
9193
  },
9194
+ "node_modules/thread-stream": {
9195
+ "version": "3.1.0",
9196
+ "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.1.0.tgz",
9197
+ "integrity": "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==",
9198
+ "license": "MIT",
9199
+ "peer": true,
9200
+ "dependencies": {
9201
+ "real-require": "^0.2.0"
9202
+ }
9203
+ },
9204
  "node_modules/through": {
9205
  "version": "2.3.8",
9206
  "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
 
9246
  "node": ">=8.0"
9247
  }
9248
  },
9249
+ "node_modules/toad-cache": {
9250
+ "version": "3.7.0",
9251
+ "resolved": "https://registry.npmjs.org/toad-cache/-/toad-cache-3.7.0.tgz",
9252
+ "integrity": "sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==",
9253
+ "license": "MIT",
9254
+ "peer": true,
9255
+ "engines": {
9256
+ "node": ">=12"
9257
+ }
9258
+ },
9259
  "node_modules/toidentifier": {
9260
  "version": "1.0.1",
9261
  "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
 
9716
  "version": "4.4.1",
9717
  "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
9718
  "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
 
9719
  "dependencies": {
9720
  "punycode": "^2.1.0"
9721
  }
backend/package.json CHANGED
@@ -38,6 +38,7 @@
38
  "dotenv": "^16.4.5",
39
  "mysql2": "^3.11.3",
40
  "nest-access-control": "^3.1.0",
 
41
  "pg": "^8.13.0",
42
  "reflect-metadata": "^0.2.0",
43
  "rxjs": "^7.8.1",
 
38
  "dotenv": "^16.4.5",
39
  "mysql2": "^3.11.3",
40
  "nest-access-control": "^3.1.0",
41
+ "nestjs-paginate": "^9.3.0",
42
  "pg": "^8.13.0",
43
  "reflect-metadata": "^0.2.0",
44
  "rxjs": "^7.8.1",
backend/src/app.module.ts CHANGED
@@ -11,6 +11,7 @@ import { UserModule } from './modules/user/user.module.js';
11
  import { BranchModule } from './modules/branch/branch.module.js';
12
  import { AuthenticationModule } from './modules/authentication/authentication.module.js';
13
  import { MenuItemModule } from './modules/menu-item/menu-item.module.js';
 
14
  @Module({
15
  imports: [
16
  ConfigModule.forRoot({
@@ -25,6 +26,7 @@ import { MenuItemModule } from './modules/menu-item/menu-item.module.js';
25
  BranchModule,
26
  AuthenticationModule,
27
  MenuItemModule,
 
28
  ],
29
  controllers: [AppController],
30
  providers: [AppService],
 
11
  import { BranchModule } from './modules/branch/branch.module.js';
12
  import { AuthenticationModule } from './modules/authentication/authentication.module.js';
13
  import { MenuItemModule } from './modules/menu-item/menu-item.module.js';
14
+ import { FeedsModule } from './modules/feeds/feeds.module.js';
15
  @Module({
16
  imports: [
17
  ConfigModule.forRoot({
 
26
  BranchModule,
27
  AuthenticationModule,
28
  MenuItemModule,
29
+ FeedsModule,
30
  ],
31
  controllers: [AppController],
32
  providers: [AppService],
backend/src/entities/feed.entity.ts ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { Entity, Column, BaseEntity, PrimaryGeneratedColumn } from 'typeorm';
2
+
3
+ @Entity('feeds')
4
+ export class FeedEntity extends BaseEntity {
5
+ @PrimaryGeneratedColumn()
6
+ id: number;
7
+
8
+ @Column({ nullable: true })
9
+ author_id: string;
10
+
11
+ @Column({ nullable: true })
12
+ image_url: string;
13
+
14
+ @Column()
15
+ title: string;
16
+
17
+ @Column({ nullable: true })
18
+ description: string;
19
+
20
+ @Column({ type: 'timestamp', default: () => 'CURRENT_TIMESTAMP' })
21
+ create_at: Date;
22
+ }
backend/src/migrations/1729780814885-AddFeeds.ts ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { MigrationInterface, QueryRunner } from "typeorm";
2
+
3
+ export class AddFeeds1729780814885 implements MigrationInterface {
4
+ name = 'AddFeeds1729780814885'
5
+
6
+ public async up(queryRunner: QueryRunner): Promise<void> {
7
+ await queryRunner.query(`CREATE TABLE "feeds" ("id" SERIAL NOT NULL, "author_id" character varying, "image_url" character varying, "title" character varying NOT NULL, "description" character varying, "create_at" TIMESTAMP NOT NULL DEFAULT now(), CONSTRAINT "PK_3dafbf766ecbb1eb2017732153f" PRIMARY KEY ("id"))`);
8
+ }
9
+
10
+ public async down(queryRunner: QueryRunner): Promise<void> {
11
+ await queryRunner.query(`DROP TABLE "feeds"`);
12
+ }
13
+
14
+ }
backend/src/modules/feeds/dto/create-feed.dto.ts ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { IsString, IsUrl } from 'class-validator';
2
+
3
+ export class CreateFeedDto {
4
+ @IsUrl()
5
+ image_url: string;
6
+
7
+ @IsString()
8
+ title: string;
9
+
10
+ @IsString()
11
+ description: string;
12
+ }
backend/src/modules/feeds/dto/update-feed.dto.ts ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { IsOptional, IsString, IsUrl } from 'class-validator';
2
+
3
+ export class UpdateFeedDto {
4
+ @IsUrl()
5
+ @IsOptional()
6
+ image_url?: string;
7
+
8
+ @IsString()
9
+ @IsOptional()
10
+ title?: string;
11
+
12
+ @IsString()
13
+ @IsOptional()
14
+ description?: string;
15
+ }
backend/src/modules/feeds/feeds.controller.ts ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import {
2
+ Controller,
3
+ Get,
4
+ Post,
5
+ Body,
6
+ Patch,
7
+ Param,
8
+ Delete,
9
+ } from '@nestjs/common';
10
+ import { FeedsService } from './feeds.service.js';
11
+ import { CreateFeedDto } from './dto/create-feed.dto.js';
12
+ import { UpdateFeedDto } from './dto/update-feed.dto.js';
13
+ import { Public } from '../authentication/authentication.decorator.js';
14
+ import { Paginate, PaginateQuery } from 'nestjs-paginate';
15
+
16
+ @Public()
17
+ @Controller('feeds')
18
+ export class FeedsController {
19
+ constructor(private readonly feedsService: FeedsService) {}
20
+
21
+ @Post()
22
+ create(@Body() createFeedDto: CreateFeedDto) {
23
+ return this.feedsService.create(createFeedDto);
24
+ }
25
+
26
+ @Get()
27
+ findAll(@Paginate() paginateQuery: PaginateQuery) {
28
+ return this.feedsService.findAll(paginateQuery);
29
+ }
30
+
31
+ @Get(':id')
32
+ findOne(@Param('id') id: string) {
33
+ return this.feedsService.findOne(+id);
34
+ }
35
+
36
+ @Patch(':id')
37
+ update(@Param('id') id: string, @Body() updateFeedDto: UpdateFeedDto) {
38
+ return this.feedsService.update(+id, updateFeedDto);
39
+ }
40
+
41
+ @Delete(':id')
42
+ remove(@Param('id') id: string) {
43
+ return this.feedsService.remove(+id);
44
+ }
45
+ }
backend/src/modules/feeds/feeds.module.ts ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ import { Module } from '@nestjs/common';
2
+ import { FeedsService } from './feeds.service.js';
3
+ import { FeedsController } from './feeds.controller.js';
4
+
5
+ @Module({
6
+ controllers: [FeedsController],
7
+ providers: [FeedsService],
8
+ })
9
+ export class FeedsModule {}
backend/src/modules/feeds/feeds.service.ts ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { Injectable, NotFoundException } from '@nestjs/common';
2
+ import { CreateFeedDto } from './dto/create-feed.dto.js';
3
+ import { UpdateFeedDto } from './dto/update-feed.dto.js';
4
+ import { FeedEntity } from '../../entities/feed.entity.js';
5
+ import { plainToClass } from 'class-transformer';
6
+ import {
7
+ FilterOperator,
8
+ paginate,
9
+ PaginateConfig,
10
+ PaginateQuery,
11
+ } from 'nestjs-paginate';
12
+
13
+ @Injectable()
14
+ export class FeedsService {
15
+ async create(createFeedDto: CreateFeedDto) {
16
+ return await FeedEntity.create({ ...createFeedDto }).save();
17
+ }
18
+
19
+ async findAll(paginateQuery: PaginateQuery) {
20
+ const paginateConfig: PaginateConfig<FeedEntity> = {
21
+ sortableColumns: ['id', 'create_at', 'author_id'],
22
+ filterableColumns: {
23
+ author_id: [FilterOperator.EQ],
24
+ },
25
+ defaultSortBy: [['id', 'DESC']],
26
+ };
27
+ return paginate(
28
+ paginateQuery,
29
+ FeedEntity.createQueryBuilder(),
30
+ paginateConfig,
31
+ );
32
+ }
33
+
34
+ async findOne(id: number) {
35
+ return await FeedEntity.findOneBy({ id: id });
36
+ }
37
+
38
+ async getFeedOrError(id: number) {
39
+ let feed = await FeedEntity.findOneBy({ id });
40
+ if (!feed) {
41
+ throw new NotFoundException('Menu item not found');
42
+ }
43
+ return feed;
44
+ }
45
+
46
+ async update(id: number, updateFeedDto: UpdateFeedDto) {
47
+ let feed = await this.getFeedOrError(id);
48
+ feed = plainToClass(FeedEntity, {
49
+ ...feed,
50
+ ...updateFeedDto,
51
+ });
52
+ return await feed.save();
53
+ }
54
+
55
+ async remove(id: number) {
56
+ let feed = await this.getFeedOrError(id);
57
+ return await feed.remove();
58
+ }
59
+ }
backend/src/modules/menu-item/menu-item.controller.ts CHANGED
@@ -11,6 +11,7 @@ import { MenuItemService } from './menu-item.service.js';
11
  import { CreateMenuItemDto } from './dto/create-menu-item.dto.js';
12
  import { UpdateMenuItemDto } from './dto/update-menu-item.dto.js';
13
  import { Public } from '../authentication/authentication.decorator.js';
 
14
 
15
  @Public()
16
  @Controller('menu-items')
@@ -23,8 +24,8 @@ export class MenuItemController {
23
  }
24
 
25
  @Get()
26
- async findAll() {
27
- return this.menuItemService.findAll();
28
  }
29
 
30
  @Get(':id')
 
11
  import { CreateMenuItemDto } from './dto/create-menu-item.dto.js';
12
  import { UpdateMenuItemDto } from './dto/update-menu-item.dto.js';
13
  import { Public } from '../authentication/authentication.decorator.js';
14
+ import { Paginate, PaginateQuery } from 'nestjs-paginate';
15
 
16
  @Public()
17
  @Controller('menu-items')
 
24
  }
25
 
26
  @Get()
27
+ async findAll(@Paginate() query: PaginateQuery) {
28
+ return this.menuItemService.findAll(query);
29
  }
30
 
31
  @Get(':id')
backend/src/modules/menu-item/menu-item.service.ts CHANGED
@@ -4,6 +4,12 @@ import { UpdateMenuItemDto } from './dto/update-menu-item.dto.js';
4
  import { MenuItemEntity } from '../../entities/menu-item.entity.js';
5
  import { Public } from '../authentication/authentication.decorator.js';
6
  import { plainToClass } from 'class-transformer';
 
 
 
 
 
 
7
 
8
  @Public()
9
  @Injectable()
@@ -12,8 +18,28 @@ export class MenuItemService {
12
  return await MenuItemEntity.create({ ...createMenuItemDto }).save();
13
  }
14
 
15
- async findAll() {
16
- return await MenuItemEntity.find();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  }
18
 
19
  async findOne(id: string) {
 
4
  import { MenuItemEntity } from '../../entities/menu-item.entity.js';
5
  import { Public } from '../authentication/authentication.decorator.js';
6
  import { plainToClass } from 'class-transformer';
7
+ import {
8
+ FilterOperator,
9
+ paginate,
10
+ PaginateConfig,
11
+ PaginateQuery,
12
+ } from 'nestjs-paginate';
13
 
14
  @Public()
15
  @Injectable()
 
18
  return await MenuItemEntity.create({ ...createMenuItemDto }).save();
19
  }
20
 
21
+ async findAll(query: PaginateQuery) {
22
+ const paginateConfig: PaginateConfig<MenuItemEntity> = {
23
+ sortableColumns: [
24
+ 'id',
25
+ 'item_group_id',
26
+ 'item_name',
27
+ 'price',
28
+ 'create_at',
29
+ ],
30
+ nullSort: 'last',
31
+ defaultSortBy: [['id', 'DESC']],
32
+ searchableColumns: ['item_name'],
33
+ filterableColumns: {
34
+ price: [
35
+ FilterOperator.LT,
36
+ FilterOperator.LTE,
37
+ FilterOperator.GT,
38
+ FilterOperator.GTE,
39
+ ],
40
+ },
41
+ };
42
+ return paginate(query, MenuItemEntity.createQueryBuilder(), paginateConfig);
43
  }
44
 
45
  async findOne(id: string) {