diff --git a/backend/node_modules/.package-lock.json b/backend/node_modules/.package-lock.json
index 8ac3f29ef9c81ea4f85d179235f99a949e5bcea9..4a61a847df321d977aa7a7f94186b5efe523080e 100644
--- a/backend/node_modules/.package-lock.json
+++ b/backend/node_modules/.package-lock.json
@@ -17,7 +17,6 @@
             "version": "0.8.1",
             "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
             "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
-            "dev": true,
             "dependencies": {
                 "@jridgewell/trace-mapping": "0.3.9"
             },
@@ -164,7 +163,6 @@
             "version": "3.1.1",
             "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
             "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
-            "dev": true,
             "engines": {
                 "node": ">=6.0.0"
             }
@@ -172,14 +170,12 @@
         "node_modules/@jridgewell/sourcemap-codec": {
             "version": "1.4.15",
             "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
-            "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
-            "dev": true
+            "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
         },
         "node_modules/@jridgewell/trace-mapping": {
             "version": "0.3.9",
             "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
             "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
-            "dev": true,
             "dependencies": {
                 "@jridgewell/resolve-uri": "^3.0.3",
                 "@jridgewell/sourcemap-codec": "^1.4.10"
@@ -310,26 +306,22 @@
         "node_modules/@tsconfig/node10": {
             "version": "1.0.9",
             "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz",
-            "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==",
-            "dev": true
+            "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA=="
         },
         "node_modules/@tsconfig/node12": {
             "version": "1.0.11",
             "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
-            "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
-            "dev": true
+            "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag=="
         },
         "node_modules/@tsconfig/node14": {
             "version": "1.0.3",
             "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
-            "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
-            "dev": true
+            "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow=="
         },
         "node_modules/@tsconfig/node16": {
             "version": "1.0.4",
             "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
-            "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
-            "dev": true
+            "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA=="
         },
         "node_modules/@types/body-parser": {
             "version": "1.19.5",
@@ -811,7 +803,6 @@
             "version": "8.11.2",
             "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz",
             "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==",
-            "dev": true,
             "bin": {
                 "acorn": "bin/acorn"
             },
@@ -832,7 +823,6 @@
             "version": "8.3.0",
             "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz",
             "integrity": "sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==",
-            "dev": true,
             "engines": {
                 "node": ">=0.4.0"
             }
@@ -893,8 +883,7 @@
         "node_modules/arg": {
             "version": "4.1.3",
             "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
-            "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
-            "dev": true
+            "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA=="
         },
         "node_modules/argparse": {
             "version": "2.0.1",
@@ -1261,8 +1250,7 @@
         "node_modules/create-require": {
             "version": "1.1.1",
             "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
-            "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
-            "dev": true
+            "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ=="
         },
         "node_modules/cross-spawn": {
             "version": "7.0.3",
@@ -1421,7 +1409,6 @@
             "version": "4.0.2",
             "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
             "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
-            "dev": true,
             "engines": {
                 "node": ">=0.3.1"
             }
@@ -2110,6 +2097,20 @@
             "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
             "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
         },
+        "node_modules/fsevents": {
+            "version": "2.3.3",
+            "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+            "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+            "dev": true,
+            "hasInstallScript": true,
+            "optional": true,
+            "os": [
+                "darwin"
+            ],
+            "engines": {
+                "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+            }
+        },
         "node_modules/function-bind": {
             "version": "1.1.2",
             "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
@@ -2646,8 +2647,7 @@
         "node_modules/make-error": {
             "version": "1.3.6",
             "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
-            "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
-            "dev": true
+            "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw=="
         },
         "node_modules/media-typer": {
             "version": "0.3.0",
@@ -4044,7 +4044,6 @@
             "version": "10.9.1",
             "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz",
             "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==",
-            "dev": true,
             "dependencies": {
                 "@cspotcode/source-map-support": "^0.8.0",
                 "@tsconfig/node10": "^1.0.7",
@@ -4142,7 +4141,6 @@
             "version": "5.2.2",
             "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz",
             "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==",
-            "dev": true,
             "bin": {
                 "tsc": "bin/tsc",
                 "tsserver": "bin/tsserver"
@@ -4219,8 +4217,7 @@
         "node_modules/v8-compile-cache-lib": {
             "version": "3.0.1",
             "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
-            "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
-            "dev": true
+            "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg=="
         },
         "node_modules/validator": {
             "version": "13.11.0",
@@ -4321,7 +4318,6 @@
             "version": "3.1.1",
             "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
             "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
-            "dev": true,
             "engines": {
                 "node": ">=6"
             }
diff --git a/backend/node_modules/@cspotcode/source-map-support/register-hook-require.d.ts b/backend/node_modules/@cspotcode/source-map-support/register-hook-require.d.ts
old mode 100644
new mode 100755
diff --git a/backend/node_modules/@cspotcode/source-map-support/register.d.ts b/backend/node_modules/@cspotcode/source-map-support/register.d.ts
old mode 100644
new mode 100755
diff --git a/backend/node_modules/@cspotcode/source-map-support/source-map-support.d.ts b/backend/node_modules/@cspotcode/source-map-support/source-map-support.d.ts
old mode 100644
new mode 100755
diff --git a/backend/node_modules/ts-node/dist/bin-cwd.js b/backend/node_modules/ts-node/dist/bin-cwd.js
old mode 100644
new mode 100755
diff --git a/backend/node_modules/ts-node/dist/bin-esm.js b/backend/node_modules/ts-node/dist/bin-esm.js
old mode 100644
new mode 100755
diff --git a/backend/node_modules/ts-node/dist/bin-script-deprecated.js b/backend/node_modules/ts-node/dist/bin-script-deprecated.js
old mode 100644
new mode 100755
diff --git a/backend/node_modules/ts-node/dist/bin-script.js b/backend/node_modules/ts-node/dist/bin-script.js
old mode 100644
new mode 100755
diff --git a/backend/node_modules/ts-node/dist/bin-transpile.js b/backend/node_modules/ts-node/dist/bin-transpile.js
old mode 100644
new mode 100755
diff --git a/backend/node_modules/ts-node/dist/bin.js b/backend/node_modules/ts-node/dist/bin.js
old mode 100644
new mode 100755
diff --git a/backend/package-lock.json b/backend/package-lock.json
index 4ffd93f039926d6b24127f394c3a8c9141077891..b773c4c5e776a242b4e0e81cc0ce4160326243f1 100644
--- a/backend/package-lock.json
+++ b/backend/package-lock.json
@@ -21,6 +21,7 @@
                 "reflect-metadata": "^0.1.13",
                 "sequelize": "^6.35.1",
                 "sequelize-typescript": "^2.1.5",
+                "ts-node": "^10.9.1",
                 "zod": "^3.22.4"
             },
             "devDependencies": {
@@ -35,7 +36,6 @@
                 "eslint-plugin-prettier": "^5.0.1",
                 "nodemon": "^3.0.1",
                 "prettier": "^3.1.0",
-                "ts-node": "^10.9.1",
                 "typescript": "^5.2.2"
             }
         },
@@ -52,7 +52,6 @@
             "version": "0.8.1",
             "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
             "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
-            "dev": true,
             "dependencies": {
                 "@jridgewell/trace-mapping": "0.3.9"
             },
@@ -199,7 +198,6 @@
             "version": "3.1.1",
             "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
             "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
-            "dev": true,
             "engines": {
                 "node": ">=6.0.0"
             }
@@ -207,14 +205,12 @@
         "node_modules/@jridgewell/sourcemap-codec": {
             "version": "1.4.15",
             "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
-            "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
-            "dev": true
+            "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
         },
         "node_modules/@jridgewell/trace-mapping": {
             "version": "0.3.9",
             "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
             "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
-            "dev": true,
             "dependencies": {
                 "@jridgewell/resolve-uri": "^3.0.3",
                 "@jridgewell/sourcemap-codec": "^1.4.10"
@@ -345,26 +341,22 @@
         "node_modules/@tsconfig/node10": {
             "version": "1.0.9",
             "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz",
-            "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==",
-            "dev": true
+            "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA=="
         },
         "node_modules/@tsconfig/node12": {
             "version": "1.0.11",
             "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
-            "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
-            "dev": true
+            "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag=="
         },
         "node_modules/@tsconfig/node14": {
             "version": "1.0.3",
             "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
-            "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
-            "dev": true
+            "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow=="
         },
         "node_modules/@tsconfig/node16": {
             "version": "1.0.4",
             "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
-            "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
-            "dev": true
+            "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA=="
         },
         "node_modules/@types/body-parser": {
             "version": "1.19.5",
@@ -846,7 +838,6 @@
             "version": "8.11.2",
             "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz",
             "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==",
-            "dev": true,
             "bin": {
                 "acorn": "bin/acorn"
             },
@@ -867,7 +858,6 @@
             "version": "8.3.0",
             "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz",
             "integrity": "sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==",
-            "dev": true,
             "engines": {
                 "node": ">=0.4.0"
             }
@@ -928,8 +918,7 @@
         "node_modules/arg": {
             "version": "4.1.3",
             "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
-            "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
-            "dev": true
+            "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA=="
         },
         "node_modules/argparse": {
             "version": "2.0.1",
@@ -1296,8 +1285,7 @@
         "node_modules/create-require": {
             "version": "1.1.1",
             "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
-            "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
-            "dev": true
+            "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ=="
         },
         "node_modules/cross-spawn": {
             "version": "7.0.3",
@@ -1456,7 +1444,6 @@
             "version": "4.0.2",
             "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
             "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
-            "dev": true,
             "engines": {
                 "node": ">=0.3.1"
             }
@@ -2695,8 +2682,7 @@
         "node_modules/make-error": {
             "version": "1.3.6",
             "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
-            "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
-            "dev": true
+            "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw=="
         },
         "node_modules/media-typer": {
             "version": "0.3.0",
@@ -4093,7 +4079,6 @@
             "version": "10.9.1",
             "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz",
             "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==",
-            "dev": true,
             "dependencies": {
                 "@cspotcode/source-map-support": "^0.8.0",
                 "@tsconfig/node10": "^1.0.7",
@@ -4191,7 +4176,6 @@
             "version": "5.2.2",
             "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz",
             "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==",
-            "dev": true,
             "bin": {
                 "tsc": "bin/tsc",
                 "tsserver": "bin/tsserver"
@@ -4268,8 +4252,7 @@
         "node_modules/v8-compile-cache-lib": {
             "version": "3.0.1",
             "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
-            "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
-            "dev": true
+            "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg=="
         },
         "node_modules/validator": {
             "version": "13.11.0",
@@ -4370,7 +4353,6 @@
             "version": "3.1.1",
             "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
             "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
-            "dev": true,
             "engines": {
                 "node": ">=6"
             }
diff --git a/backend/package.json b/backend/package.json
index 686176b8b78e79ad8b3d561dd002dc1f982cb845..22cd6be6ead433eb0f1f043d5ef449e2844bbdbc 100644
--- a/backend/package.json
+++ b/backend/package.json
@@ -27,6 +27,7 @@
         "reflect-metadata": "^0.1.13",
         "sequelize": "^6.35.1",
         "sequelize-typescript": "^2.1.5",
+        "ts-node": "^10.9.1",
         "zod": "^3.22.4"
     },
     "devDependencies": {
@@ -41,7 +42,6 @@
         "eslint-plugin-prettier": "^5.0.1",
         "nodemon": "^3.0.1",
         "prettier": "^3.1.0",
-        "ts-node": "^10.9.1",
         "typescript": "^5.2.2"
     }
 }
diff --git a/frontend/src/AppRoutes.tsx b/frontend/src/AppRoutes.tsx
index f836ef67c685d4ce9204814b7dd6214c62d1cdc2..55eb9eceed627dddfa5347eb22d23e863794bfcf 100644
--- a/frontend/src/AppRoutes.tsx
+++ b/frontend/src/AppRoutes.tsx
@@ -13,7 +13,11 @@ import SignUpCashier from "./pages/SignUpCashier";
 import RegisterTable from "./pages/RegisterTable";
 import ChooseRolePage from "./pages/RolePage";
 import OrderDetails from "./pages/ManageOrderTenant";
+import { ShoppingCartProvider } from "./contexts/ShoppingCartContext";
+import Summary from "./pages/Summary";
+import Payment from "./pages/Payment";
 
+const orderid = 1;
 export default function AppRoutes() {
     return (
         <Routes>
@@ -23,13 +27,21 @@ export default function AppRoutes() {
             <Route path="/login/customer" element={<RegisterTable />} />
             <Route path="/signup/tenant" element={<SignUpTenant />} />
             <Route path="/signup/cashier" element={<SignUpCashier />} />
-            <Route path="/tenant/:tenantid" element={<TenantInfo />} />
+            <Route path="/tenant" element={<TenantInfo tenantid={1} />} />
             <Route path="/cart" element={<ShoppingCart />} />
-            <Route path="/order/list/:tableid" element={<OrderList />} />
-            <Route path="/order/summary/:orderid" element={<OrderSummary />} />
+            <Route path="/order/list" element={<OrderList tableid={2} />} />
+            <Route
+                path="/order/summary"
+                element={<OrderSummary orderid={3} />}
+            />
             <Route path="/tenantpage/orders" element={<PageManageOrder />} />
             <Route path="/tenantpage/menus" element={<PageManageMenu />} />
-            <Route path="/tenantpage/orders/:orderid" element={<OrderDetails />} />
+            <Route
+                path="/tenantpage/orders/:orderid"
+                element={<OrderDetails />}
+            />
+            <Route path="/summary/orders/:orderid" element={<Summary />} />
+            <Route path="/payment/:paymentid" element={<Payment />} />
         </Routes>
     );
 }
diff --git a/frontend/src/pages/Payment.tsx b/frontend/src/pages/Payment.tsx
index 6542788616a3a9164274dab71784557b221c5c66..50a68076124f33297254d5022350f3090f77c5d8 100644
--- a/frontend/src/pages/Payment.tsx
+++ b/frontend/src/pages/Payment.tsx
@@ -1,20 +1,39 @@
+import React, { useEffect, useState } from 'react';
 import Sidebar from "../components/Sidebar";
 import BackButton from "../components/BackButton";
+import { useParams } from "react-router-dom";
 
 const Payment = () => {
+    const { paymentid } = useParams();
+    const [timer, setTimer] = useState(30 * 60); // Timer in seconds: 30 minutes
+    const [formattedTime, setFormattedTime] = useState('');
+
+    useEffect(() => {
+        const countdown = setInterval(() => {
+            const minutes = Math.floor(timer / 60);
+            const seconds = timer % 60;
+            const formatted = `${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`;
+            setFormattedTime(formatted);
+
+            if (timer > 0) {
+                setTimer(timer - 1);
+            } else {
+                clearInterval(countdown);
+            }
+        }, 1000);
+
+        return () => clearInterval(countdown);
+    }, [timer]);
+
     return (
         <div className="grid grid-cols-5 grid-rows-8 bg-mealshub-cream min-h-screen">
             {/* Sidebar */}
             <div className="col-span-1 row-span-8">
                 <Sidebar
-                    number={3}
-                    current={3}
-                    menu1="Home"
-                    path1="M27 14.6465V29.4398C27 30.1188 26.7629 30.77 26.341 31.2501C25.919 31.7303 25.3467 32 24.75 32H19.125C18.5282 32 17.9559 31.7303 17.534 31.2501C17.112 30.77 16.875 30.1188 16.875 29.4398V23.0392C16.875 22.6997 16.7565 22.3741 16.5455 22.1341C16.3345 21.894 16.0484 21.7591 15.75 21.7591H11.25C10.9516 21.7591 10.6655 21.894 10.4545 22.1341C10.2435 22.3741 10.125 22.6997 10.125 23.0392V29.4398C10.125 30.1188 9.88794 30.77 9.46598 31.2501C9.04402 31.7303 8.47173 32 7.87499 32H2.25C1.65326 32 1.08097 31.7303 0.659009 31.2501C0.237052 30.77 2.59985e-08 30.1188 2.59985e-08 29.4398V14.6465C-4.73102e-05 14.2922 0.0645457 13.9417 0.189691 13.6172C0.314836 13.2928 0.497809 13.0014 0.72703 12.7616L11.977 0.683737L11.9925 0.666135C12.4067 0.237512 12.9464 0 13.5063 0C14.0662 0 14.6059 0.237512 15.0201 0.666135C15.0249 0.672397 15.0301 0.678277 15.0356 0.683737L26.2856 12.7616C26.5125 13.0027 26.6931 13.2946 26.8161 13.619C26.939 13.9434 27.0016 14.2933 27 14.6465Z"
-                    menu2="Shopping Cart"
-                    path2="M22.2968 25.6C20.7499 25.6 19.5097 27.024 19.5097 28.8C19.5097 29.6487 19.8033 30.4626 20.326 31.0627C20.8487 31.6629 21.5576 32 22.2968 32C23.036 32 23.7449 31.6629 24.2675 31.0627C24.7902 30.4626 25.0839 29.6487 25.0839 28.8C25.0839 27.9513 24.7902 27.1374 24.2675 26.5373C23.7449 25.9371 23.036 25.6 22.2968 25.6ZM0 0V3.2H2.7871L7.80387 15.344L5.90864 19.264C5.69961 19.712 5.57419 20.24 5.57419 20.8C5.57419 21.6487 5.86783 22.4626 6.39051 23.0627C6.9132 23.6629 7.62211 24 8.36129 24H25.0839V20.8H8.94658C8.85418 20.8 8.76557 20.7579 8.70023 20.6828C8.6349 20.6078 8.59819 20.5061 8.59819 20.4C8.59819 20.32 8.61213 20.256 8.64 20.208L9.89419 17.6H20.2761C21.3213 17.6 22.241 16.928 22.7148 15.952L27.7037 5.6C27.8013 5.344 27.871 5.072 27.871 4.8C27.871 4.37565 27.7241 3.96869 27.4628 3.66863C27.2015 3.36857 26.847 3.2 26.4774 3.2H5.86684L4.5569 0M8.36129 25.6C6.81445 25.6 5.57419 27.024 5.57419 28.8C5.57419 29.6487 5.86783 30.4626 6.39051 31.0627C6.9132 31.6629 7.62211 32 8.36129 32C9.10047 32 9.80938 31.6629 10.3321 31.0627C10.8547 30.4626 11.1484 29.6487 11.1484 28.8C11.1484 27.9513 10.8547 27.1374 10.3321 26.5373C9.80938 25.9371 9.10047 25.6 8.36129 25.6Z"
-                    menu3="Orders"
-                    path3="M4.10306 1.10306C3 2.20612 3 3.97929 3 7.52941V24.4706C3 28.0207 3 29.7939 4.10306 30.8969C5.20612 32 6.97929 32 10.5294 32H21.8235C25.3736 32 27.1468 32 28.2499 30.8969C29.3529 29.7939 29.3529 28.0207 29.3529 24.4706V7.52941C29.3529 3.97929 29.3529 2.20612 28.2499 1.10306C27.1468 -1.12197e-07 25.3736 0 21.8235 0H10.5294C6.97929 0 5.20612 -1.12197e-07 4.10306 1.10306ZM10.5294 7.52941C10.0302 7.52941 9.5514 7.72773 9.19839 8.08074C8.84538 8.43375 8.64706 8.91253 8.64706 9.41176C8.64706 9.911 8.84538 10.3898 9.19839 10.7428C9.5514 11.0958 10.0302 11.2941 10.5294 11.2941H21.8235C22.3228 11.2941 22.8015 11.0958 23.1546 10.7428C23.5076 10.3898 23.7059 9.911 23.7059 9.41176C23.7059 8.91253 23.5076 8.43375 23.1546 8.08074C22.8015 7.72773 22.3228 7.52941 21.8235 7.52941H10.5294ZM10.5294 15.0588C10.0302 15.0588 9.5514 15.2571 9.19839 15.6102C8.84538 15.9632 8.64706 16.4419 8.64706 16.9412C8.64706 17.4404 8.84538 17.9192 9.19839 18.2722C9.5514 18.6252 10.0302 18.8235 10.5294 18.8235H21.8235C22.3228 18.8235 22.8015 18.6252 23.1546 18.2722C23.5076 17.9192 23.7059 17.4404 23.7059 16.9412C23.7059 16.4419 23.5076 15.9632 23.1546 15.6102C22.8015 15.2571 22.3228 15.0588 21.8235 15.0588H10.5294ZM10.5294 22.5882C10.0302 22.5882 9.5514 22.7866 9.19839 23.1396C8.84538 23.4926 8.64706 23.9714 8.64706 24.4706C8.64706 24.9698 8.84538 25.4486 9.19839 25.8016C9.5514 26.1546 10.0302 26.3529 10.5294 26.3529H18.0588C18.5581 26.3529 19.0368 26.1546 19.3898 25.8016C19.7429 25.4486 19.9412 24.9698 19.9412 24.4706C19.9412 23.9714 19.7429 23.4926 19.3898 23.1396C19.0368 22.7866 18.5581 22.5882 18.0588 22.5882H10.5294Z"
+                    number={1}
+                    current={1}
+                    menu1="Payment List"
+                    path1="M8.22042 7.85718C6.79962 7.85718 5.43701 8.47803 4.43235 9.58316C3.42769 10.6883 2.86328 12.1872 2.86328 13.75V14.9286H37.1433V13.75C37.1433 12.1872 36.5789 10.6883 35.5742 9.58316C34.5696 8.47803 33.2069 7.85718 31.7861 7.85718H8.22042ZM2.86328 30.25V17.2857H37.1433V30.25C37.1433 31.8129 36.5789 33.3118 35.5742 34.4169C34.5696 35.522 33.2069 36.1429 31.7861 36.1429H8.22185C6.80105 36.1429 5.43844 35.522 4.43378 34.4169C3.42912 33.3118 2.86471 31.8129 2.86471 30.25H2.86328ZM26.0719 25.9286C25.7877 25.9286 25.5152 26.0528 25.3142 26.2738C25.1133 26.4948 25.0004 26.7946 25.0004 27.1072C25.0004 27.4198 25.1133 27.7195 25.3142 27.9406C25.5152 28.1616 25.7877 28.2857 26.0719 28.2857H31.0719C31.356 28.2857 31.6285 28.1616 31.8295 27.9406C32.0304 27.7195 32.1433 27.4198 32.1433 27.1072C32.1433 26.7946 32.0304 26.4948 31.8295 26.2738C31.6285 26.0528 31.356 25.9286 31.0719 25.9286H26.0719Z"
                 />
             </div>
             {/* Header */}
@@ -30,24 +49,21 @@ const Payment = () => {
                     </div>
                     <div className="ms-20 py-12 px-16 space-y-8 bg-white rounded-3xl">
                         <p className="text-2xl font-bold text-[#E44937]">
-                            {" "}
-                            Unique Code{" "}
+                            Unique Code
                         </p>
                         <p className="text-1xl">
-                            {" "}
-                            You have checked out your order.{" "}
+                            You have checked out your order.
                         </p>
                         <p className="text-1xl">Here is your unique code.</p>
                         <p className="text-4xl font-bold text-[#0B828F]">
-                            {" "}
-                            A123{" "}
+                            {paymentid}
                         </p>
                         <p className="text-1xl">
                             Don’t forget to show it to the central cashier to
                             pay your order before timer runs out.
                         </p>
                         <p className="text-4xl font-bold text-[#F5A306]">
-                            29:59
+                            {formattedTime}
                         </p>
                     </div>
                 </div>
diff --git a/frontend/src/pages/Summary.tsx b/frontend/src/pages/Summary.tsx
index 0b186917589ea7d86b8997a150868a952621c05e..042d3659215951b178d389f1c84b6365b6dfc7ad 100644
--- a/frontend/src/pages/Summary.tsx
+++ b/frontend/src/pages/Summary.tsx
@@ -5,23 +5,245 @@ import BackButton from "../components/BackButton";
 import Welcome from "../components/Welcome";
 import Profile from "../components/Profile";
 import ProfileDropDown from "../components/ProfileDropDown";
-import { useState } from "react";
+import { useEffect, useState } from "react";
 import ConfirmPopUp from "../components/ConfirmPopUp";
+import Axios from "axios";
+import { useParams } from "react-router-dom";
+
+interface Order {
+    id: number;
+    status: string;
+    time: Date;
+    id_table: number;
+    id_tenant: number;
+}
+
+interface OrderProduct {
+    num_product: number;
+    id_product: number;
+    id_order: number;
+}
+
+interface Product {
+    id: number;
+    name: string;
+    price: number;
+}
+
+interface Tenant {
+    id: number;
+    name: string;
+}
+
+interface Payment {
+    id: number;
+    status: string;
+    id_order: number;
+}
+
+interface OrderSummary {
+    name: string;
+    orderlist: (string | number)[][];
+}
+
+interface OrderDetails {
+    orderid: number;
+    code: number;
+    tableid: number;
+    time: Date;
+    orderstatus: string;
+    paymentstatus: string;
+}
 
 const Summary = () => {
+    const { orderid } = useParams();
+    const [confirmed, setConfirmed] = useState(false);
     const [showProfileDropDown, setShowProfileDropDown] = useState(false);
     const [showConfirmPopUp, setShowConfirmPopUp] = useState(false);
+    const [joinedOrderDetailsData, setJoinedOrderDetailsData] = useState<
+        OrderDetails[]
+    >([]);
+    const [buttonState, setButtonState] = useState({
+        label: "Waiting for Payment",
+        disabled: true,
+        color: "mealshub-greenpalet",
+        onClick: () => {},
+    });
+    const getOrderDetailsData = async () => {
+        const orderResponse = await Axios.get(
+            `http://localhost:8000/orders/${orderid}`,
+        );
+        const paymentResponse = await Axios.get(
+            "http://localhost:8000/payments",
+        );
+
+        const orderData = orderResponse.data.data;
+        const paymentData = paymentResponse.data.data;
+
+        // Perform the join based on the specified conditions
+        const OrderDataArray = [orderData];
+        const result = OrderDataArray.map((order: Order) => {
+            const matchingPayment = paymentData.find(
+                (payment: Payment) => payment.id_order === order.id,
+            );
+
+            return {
+                orderid: order.id,
+                code: matchingPayment.id,
+                tableid: order.id_table,
+                time: order.time,
+                orderstatus: order.status,
+                paymentstatus: matchingPayment.status,
+            };
+        });
+
+        setJoinedOrderDetailsData(result);
+    };
+    const [joinedOrderSummaryData, setJoinedOrderSummaryData] = useState<
+        OrderSummary[]
+    >([]);
 
     const handleProfileClick = () => {
         setShowProfileDropDown(!showProfileDropDown);
     };
-    const handleConfirmPayment = () => {
+
+    const handleConfirmPayment = async () => {
         setShowConfirmPopUp(true);
+
+        // Panggil API untuk memperbarui status order menjadi "Confirmed" atau "Completed"
+        try {
+            console.log("BELOM");
+            await Axios.patch(`http://localhost:8000/orders/${orderid}`, {
+                status: "Confirmed", // Ubah status order ke "Confirmed"
+            });
+            console.log("MAASUK");
+
+            // Dapatkan ulang data order setelah perubahan status
+            getOrderDetailsData();
+
+            // Atur ulang button state setelah konfirmasi
+            setButtonState({
+                label: "Confirmed", // Ganti label tombol menjadi "Confirmed"
+                disabled: true,
+                color: "mealshub-greenpalet",
+                onClick: () => {}, // Fungsi kosong karena tombol akan dinonaktifkan setelah diklik
+            });
+        } catch (error) {
+            // Handle error jika terjadi kesalahan saat memanggil API
+            console.error("Error confirming payment:", error);
+            // Tambahkan penanganan error sesuai kebutuhan aplikasi Anda
+        }
     };
 
-    const handleCloseConfirmPopUp = () => {
+    const handleCloseConfirmPopUp = async () => {
         setShowConfirmPopUp(false);
+    
+        try {
+            // Panggil API untuk memperbarui status order menjadi "Confirmed"
+            await Axios.patch(`http://localhost:8000/orders/${orderid}`, {
+                status: "Completed",
+            });
+    
+            // Dapatkan ulang data order setelah perubahan status
+            getOrderDetailsData();
+    
+            // Atur ulang button state setelah konfirmasi
+            setButtonState({
+                label: "Confirmed",
+                disabled: true,
+                color: "mealshub-greenpalet",
+                onClick: () => {}, // Tombol dinonaktifkan karena status sudah "Confirmed"
+            });
+    
+            setConfirmed(true); // Setelah menutup pop-up, tandai bahwa konfirmasi telah dilakukan
+        } catch (error) {
+            console.error("Error confirming payment:", error);
+            // Tambahkan penanganan error sesuai kebutuhan aplikasi Anda
+        }
+    };
+    
+
+    const getOrderSummaryData = async () => {
+        const orderResponse = await Axios.get(
+            `http://localhost:8000/orders/${orderid}`,
+        );
+        const productResponse = await Axios.get(
+            "http://localhost:8000/products",
+        );
+        const orderProductResponse = await Axios.get(
+            "http://localhost:8000/orderproduct",
+        );
+        const tenantResponse = await Axios.get("http://localhost:8000/tenants");
+
+        const orderData = orderResponse.data.data;
+        const productData = productResponse.data.data;
+        const orderProductData = orderProductResponse.data.data;
+        const tenantData = tenantResponse.data.data;
+
+        // Perform the join based on the specified conditions
+        // OrderData is not an array, so we need to convert it into an array
+        const orderDataArray = [orderData];
+        const result = orderDataArray.map((order: Order) => {
+            const tenant = tenantData.find(
+                (tenant: Tenant) => tenant.id === order.id_tenant,
+            );
+            const orderproduct = orderProductData.filter(
+                (orderProduct: OrderProduct) =>
+                    orderProduct.id_order === order.id,
+            );
+            const listproduct = orderproduct.map(
+                (orderProduct: OrderProduct) => {
+                    const product = productData.find(
+                        (product: Product) =>
+                            product.id === orderProduct.id_product,
+                    );
+                    return [
+                        product.name,
+                        orderProduct.num_product,
+                        product.price,
+                    ];
+                },
+            );
+
+            return {
+                name: tenant.name,
+                orderlist: listproduct,
+            };
+        });
+
+        setJoinedOrderSummaryData(result);
     };
+    useEffect(() => {
+        getOrderDetailsData();
+    }, []);
+    useEffect(() => {
+        getOrderSummaryData();
+    }, []);
+
+    console.log(joinedOrderSummaryData);
+    useEffect(() => {
+        // Update button state based on payment and order status
+        if (joinedOrderDetailsData.length > 0) {
+            const paymentStatus = joinedOrderDetailsData[0].paymentstatus;
+
+            if (paymentStatus === "Waiting for Confirmation") {
+                setButtonState({
+                    label: "Confirm",
+                    disabled: false,
+                    color: "mealshub-red",
+                    onClick: () => setShowConfirmPopUp(true), // Menampilkan pop-up saat tombol diklik
+                });
+            } else if (paymentStatus === "Confirmed") {
+                setButtonState({
+                    label: "Confirmed",
+                    disabled: true,
+                    color: "mealshub-greenpalet",
+                    onClick: () => {}, // Tombol dinonaktifkan karena status sudah "Confirmed"
+                });
+            }
+        }
+    }, [joinedOrderDetailsData]);
+
     return (
         // Create grid layout for sidebard, header, and main content
         <div className="grid grid-cols-5 grid-rows-8 bg-mealshub-cream min-h-screen">
@@ -41,7 +263,7 @@ const Summary = () => {
                 </div>
                 <div className="absolute top-0 right-0 mt-9 mx-12">
                     <Profile
-                        image="/public/images/ProfileDefault.png"
+                        image="/images/ProfileDefault.png"
                         onProfileClick={handleProfileClick}
                     />
                 </div>
@@ -61,14 +283,15 @@ const Summary = () => {
                         <h2 className="text-mealshub-red text-3xl font-bold ms-16">
                             Order Details
                         </h2>
-                        <OrderDetailsCard />
-                        <OrderSummaryCard />
+                        <OrderDetailsCard data={joinedOrderDetailsData} />
+                        <OrderSummaryCard data={joinedOrderSummaryData} />
                         <div className="flex mx-16 justify-center">
                             <button
-                                className="max-w-xs text-white bg-mealshub-red font-bold text-lg rounded-full px-2 py-1 text-center shadow-xl"
-                                onClick={handleConfirmPayment}
+                                onClick={buttonState.onClick}
+                                disabled={buttonState.disabled}
+                                className={`max-w-xs text-white font-bold text-lg rounded-full px-2 py-1 text-center shadow-xl bg-${buttonState.color}`}
                             >
-                                Confirm Payment
+                                {buttonState.label}
                             </button>
                         </div>
                         {showConfirmPopUp && (
diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json
new file mode 100644
index 0000000000000000000000000000000000000000..0e9ec3922554462fd029f76d962ade882895fa3c
--- /dev/null
+++ b/node_modules/.package-lock.json
@@ -0,0 +1,6 @@
+{
+  "name": "mealshub",
+  "lockfileVersion": 3,
+  "requires": true,
+  "packages": {}
+}