From 8b6d76fdea2e89f86d66184ed9d40ffe596f2819 Mon Sep 17 00:00:00 2001 From: Arthur Barre Date: Sat, 15 Mar 2025 13:11:24 +0100 Subject: [PATCH] add minio storage --- backend/package-lock.json | 465 ++++++++++++++++++++ backend/package.json | 1 + backend/src/plugins/ai.js | 227 ++++++++-- backend/src/routes/recipes.js | 10 +- backend/src/utils/storage.js | 39 ++ backend/uploads/1741985930301-recording.mp3 | Bin 0 -> 20520 bytes backend/uploads/1741986084481-recording.mp3 | Bin 0 -> 20520 bytes backend/uploads/1742040018269-recording.mp3 | Bin 0 -> 19152 bytes backend/uploads/1742040080066-recording.mp3 | Bin 0 -> 19152 bytes 9 files changed, 698 insertions(+), 44 deletions(-) create mode 100644 backend/src/utils/storage.js create mode 100644 backend/uploads/1741985930301-recording.mp3 create mode 100644 backend/uploads/1741986084481-recording.mp3 create mode 100644 backend/uploads/1742040018269-recording.mp3 create mode 100644 backend/uploads/1742040080066-recording.mp3 diff --git a/backend/package-lock.json b/backend/package-lock.json index 4bd7e07..dee7892 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -18,6 +18,7 @@ "fastify": "^4.19.0", "fastify-plugin": "^4.5.0", "google-auth-library": "^9.15.1", + "minio": "^8.0.5", "nodemailer": "^6.10.0", "openai": "^4.0.0", "resend": "^4.1.2", @@ -367,6 +368,13 @@ "form-data": "^4.0.0" } }, + "node_modules/@zxing/text-encoding": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@zxing/text-encoding/-/text-encoding-0.9.0.tgz", + "integrity": "sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==", + "license": "(Unlicense OR Apache-2.0)", + "optional": true + }, "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -531,6 +539,12 @@ "safer-buffer": "^2.1.0" } }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT" + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -546,6 +560,21 @@ "node": ">=8.0.0" } }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/avvio": { "version": "8.4.0", "resolved": "https://registry.npmjs.org/avvio/-/avvio-8.4.0.tgz", @@ -618,6 +647,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/block-stream2": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/block-stream2/-/block-stream2-2.1.0.tgz", + "integrity": "sha512-suhjmLI57Ewpmq00qaygS8UgEq2ly2PCItenIyhMqVjo4t4pGzqMvfgJuX8iWTeSDdfSSqS6j38fL4ToNL7Pfg==", + "license": "MIT", + "dependencies": { + "readable-stream": "^3.4.0" + } + }, "node_modules/bn.js": { "version": "4.12.1", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", @@ -647,12 +685,45 @@ "node": ">=8" } }, + "node_modules/browser-or-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-2.1.1.tgz", + "integrity": "sha512-8CVjaLJGuSKMVTxJ2DpBl5XnlNDiT4cQFeuCJJrvJmts9YrTZDizTX7PjC2s6W4x+MBGZeEY6dGMrF04/6Hgqg==", + "license": "MIT" + }, + "node_modules/buffer-crc32": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-1.0.0.tgz", + "integrity": "sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", "license": "BSD-3-Clause" }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", @@ -833,6 +904,15 @@ } } }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, "node_modules/deepmerge": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", @@ -842,6 +922,23 @@ "node": ">=0.10.0" } }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -1076,6 +1173,12 @@ "node": ">=6" } }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -1171,6 +1274,24 @@ "integrity": "sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA==", "license": "MIT" }, + "node_modules/fast-xml-parser": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.3.tgz", + "integrity": "sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "dependencies": { + "strnum": "^1.1.1" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, "node_modules/fastfall": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/fastfall/-/fastfall-1.5.1.tgz", @@ -1265,6 +1386,15 @@ "node": ">=8" } }, + "node_modules/filter-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", + "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/find-my-way": { "version": "8.2.2", "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-8.2.2.tgz", @@ -1279,6 +1409,21 @@ "node": ">=14" } }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/foreground-child": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", @@ -1609,6 +1754,18 @@ "node": ">=4" } }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-symbols": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", @@ -1750,6 +1907,22 @@ "node": ">= 0.10" } }, + "node_modules/is-arguments": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -1763,6 +1936,18 @@ "node": ">=8" } }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -1782,6 +1967,24 @@ "node": ">=8" } }, + "node_modules/is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -1805,6 +2008,24 @@ "node": ">=0.12.0" } }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -1817,6 +2038,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -2010,6 +2246,12 @@ "set-cookie-parser": "^2.4.1" } }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, "node_modules/lru-cache": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", @@ -2088,6 +2330,40 @@ "node": "*" } }, + "node_modules/minio": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/minio/-/minio-8.0.5.tgz", + "integrity": "sha512-/vAze1uyrK2R/DSkVutE4cjVoAowvIQ18RAwn7HrqnLecLlMazFnY0oNBqfuoAWvu7mZIGX75AzpuV05TJeoHg==", + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.4", + "block-stream2": "^2.1.0", + "browser-or-node": "^2.1.1", + "buffer-crc32": "^1.0.0", + "eventemitter3": "^5.0.1", + "fast-xml-parser": "^4.4.1", + "ipaddr.js": "^2.0.1", + "lodash": "^4.17.21", + "mime-types": "^2.1.35", + "query-string": "^7.1.3", + "stream-json": "^1.8.0", + "through2": "^4.0.2", + "web-encoding": "^1.1.5", + "xml2js": "^0.5.0 || ^0.6.2" + }, + "engines": { + "node": "^16 || ^18 || >=20" + } + }, + "node_modules/minio/node_modules/ipaddr.js": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, "node_modules/minipass": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", @@ -2473,6 +2749,15 @@ ], "license": "MIT" }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/prisma": { "version": "5.22.0", "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.22.0.tgz", @@ -2540,6 +2825,24 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/query-string": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.3.tgz", + "integrity": "sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==", + "license": "MIT", + "dependencies": { + "decode-uri-component": "^0.2.2", + "filter-obj": "^1.1.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/quick-format-unescaped": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", @@ -2702,6 +3005,23 @@ ], "license": "MIT" }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safe-regex2": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-3.1.0.tgz", @@ -2726,6 +3046,12 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "license": "MIT" }, + "node_modules/sax": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "license": "ISC" + }, "node_modules/scheduler": { "version": "0.25.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz", @@ -2775,6 +3101,23 @@ "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", "license": "MIT" }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -2896,6 +3239,15 @@ "atomic-sleep": "^1.0.0" } }, + "node_modules/split-on-first": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", + "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/split2": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", @@ -2918,6 +3270,21 @@ "reusify": "^1.0.0" } }, + "node_modules/stream-chain": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/stream-chain/-/stream-chain-2.2.5.tgz", + "integrity": "sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==", + "license": "BSD-3-Clause" + }, + "node_modules/stream-json": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/stream-json/-/stream-json-1.9.1.tgz", + "integrity": "sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==", + "license": "BSD-3-Clause", + "dependencies": { + "stream-chain": "^2.2.5" + } + }, "node_modules/stream-wormhole": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/stream-wormhole/-/stream-wormhole-1.1.0.tgz", @@ -2927,6 +3294,15 @@ "node": ">=4.0.0" } }, + "node_modules/strict-uri-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -3003,6 +3379,18 @@ "node": ">=12.*" } }, + "node_modules/strnum": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz", + "integrity": "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -3042,6 +3430,15 @@ "real-require": "^0.2.0" } }, + "node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "license": "MIT", + "dependencies": { + "readable-stream": "3" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -3093,6 +3490,19 @@ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "license": "MIT" }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -3112,6 +3522,18 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/web-encoding": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/web-encoding/-/web-encoding-1.1.5.tgz", + "integrity": "sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==", + "license": "MIT", + "dependencies": { + "util": "^0.12.3" + }, + "optionalDependencies": { + "@zxing/text-encoding": "0.9.0" + } + }, "node_modules/web-streams-polyfill": { "version": "4.0.0-beta.3", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", @@ -3152,6 +3574,27 @@ "node": ">= 8" } }, + "node_modules/which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", @@ -3267,6 +3710,28 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "license": "ISC" }, + "node_modules/xml2js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", + "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", + "license": "MIT", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", diff --git a/backend/package.json b/backend/package.json index 91927dd..71057a3 100644 --- a/backend/package.json +++ b/backend/package.json @@ -20,6 +20,7 @@ "fastify": "^4.19.0", "fastify-plugin": "^4.5.0", "google-auth-library": "^9.15.1", + "minio": "^8.0.5", "nodemailer": "^6.10.0", "openai": "^4.0.0", "resend": "^4.1.2", diff --git a/backend/src/plugins/ai.js b/backend/src/plugins/ai.js index c9b244e..98f937b 100644 --- a/backend/src/plugins/ai.js +++ b/backend/src/plugins/ai.js @@ -4,6 +4,11 @@ const fs = require('fs'); const util = require('util'); const { pipeline } = require('stream'); const pump = util.promisify(pipeline); +const fetch = require('node-fetch'); +const { Readable } = require('stream'); +const { uploadFile, getFileUrl } = require('../utils/storage'); +const path = require('path'); +const os = require('os'); module.exports = fp(async function (fastify, opts) { const openai = new OpenAI({ @@ -12,59 +17,199 @@ module.exports = fp(async function (fastify, opts) { fastify.decorate('openai', openai); + // Fonction utilitaire pour convertir un buffer en stream + const bufferToStream = (buffer) => { + const readable = new Readable(); + readable.push(buffer); + readable.push(null); + return readable; + }; + + // Fonction pour télécharger un fichier temporaire + const downloadToTemp = async (url, extension = '.tmp') => { + const response = await fetch(url); + if (!response.ok) { + throw new Error(`Échec du téléchargement: ${response.statusText}`); + } + + const buffer = await response.arrayBuffer(); + const tempFilePath = path.join(os.tmpdir(), `openai-${Date.now()}${extension}`); + fs.writeFileSync(tempFilePath, Buffer.from(buffer)); + + return { + path: tempFilePath, + buffer: Buffer.from(buffer), + cleanup: () => { + try { + fs.unlinkSync(tempFilePath); + } catch (err) { + fastify.log.error(`Erreur lors de la suppression du fichier temporaire: ${err.message}`); + } + } + }; + }; + // Transcription audio avec Whisper - fastify.decorate('transcribeAudio', async (audioPath) => { - const transcription = await openai.audio.transcriptions.create({ - file: fs.createReadStream(audioPath), - model: 'whisper-1', - }); - return transcription.text; + fastify.decorate('transcribeAudio', async (audioInput) => { + let tempFile = null; + let audioPath = null; + + try { + // Déterminer le type d'entrée audio + if (typeof audioInput === 'string') { + // C'est déjà un chemin de fichier + audioPath = audioInput; + } else if (audioInput && audioInput.url) { + // C'est un résultat de Minio avec une URL + tempFile = await downloadToTemp(audioInput.url, '.mp3'); + audioPath = tempFile.path; + } else if (audioInput && audioInput.localPath) { + // C'est un résultat local + audioPath = audioInput.localPath; + } else { + throw new Error("Format d'entrée audio non valide"); + } + + // Effectuer la transcription + const transcription = await openai.audio.transcriptions.create({ + file: fs.createReadStream(audioPath), + model: 'whisper-1', + }); + + return transcription.text; + } catch (error) { + fastify.log.error(`Erreur lors de la transcription audio: ${error.message}`); + throw error; + } finally { + // Nettoyer le fichier temporaire si nécessaire + if (tempFile) { + tempFile.cleanup(); + } + } }); - // Génération de recette avec 01-mini + // Génération de recette avec GPT-4o-mini fastify.decorate('generateRecipe', async (ingredients, prompt) => { - const completion = await openai.chat.completions.create({ - model: "gpt-4o-mini", // Remplacer par 01-mini quand disponible - messages: [ - { - role: "system", - content: "Tu es un chef cuisinier expert qui crée des recettes délicieuses et faciles à réaliser. Tu dois toujours répondre avec un objet JSON valide contenant les champs suivants: titre, ingredients, etapes, temps_preparation (en minutes), temps_cuisson (en minutes), portions, difficulte (facile, moyen, difficile), et conseils." - }, - { - role: "user", - content: `Voici les ingrédients disponibles: ${ingredients}. ${prompt || 'Propose une recette avec ces ingrédients.'} Réponds uniquement avec un objet JSON.` - } - ], - response_format: { type: "json_object" }, - }); + try { + const completion = await openai.chat.completions.create({ + model: "gpt-4o-mini", + messages: [ + { + role: "system", + content: "Tu es un chef cuisinier expert qui crée des recettes délicieuses et faciles à réaliser. Tu dois toujours répondre avec un objet JSON valide contenant les champs suivants: titre, ingredients, etapes, temps_preparation (en minutes), temps_cuisson (en minutes), portions, difficulte (facile, moyen, difficile), et conseils." + }, + { + role: "user", + content: `Voici les ingrédients disponibles: ${ingredients}. ${prompt || 'Propose une recette avec ces ingrédients.'} Réponds uniquement avec un objet JSON.` + } + ], + response_format: { type: "json_object" }, + }); - const recipeData = JSON.parse(completion.choices[0].message.content); + const recipeData = JSON.parse(completion.choices[0].message.content); - // Génération de l'image du plat - const imageResponse = await openai.images.generate({ - model: "dall-e-3", - prompt: `Une photo culinaire professionnelle et appétissante du plat "${recipeData.titre}". Le plat est présenté sur une belle assiette, avec un éclairage professionnel, style photographie gastronomique.`, - n: 1, - size: "1024x1024", - }); + // Génération de l'image du plat avec DALL-E + const imageResponse = await openai.images.generate({ + model: "dall-e-3", + prompt: `Une photo culinaire professionnelle et appétissante du plat "${recipeData.titre}". Le plat est présenté sur une belle assiette, avec un éclairage professionnel, style photographie gastronomique.`, + n: 1, + size: "1024x1024", + }); - // Ajouter l'URL de l'image à l'objet recette - recipeData.image_url = imageResponse.data[0].url; + // Télécharger l'image depuis l'URL OpenAI + const imageUrl = imageResponse.data[0].url; + const response = await fetch(imageUrl); + const imageBuffer = Buffer.from(await response.arrayBuffer()); - return recipeData; + // Préparer le fichier pour Minio + const sanitizedTitle = recipeData.titre.replace(/[^a-zA-Z0-9]/g, '-').toLowerCase(); + const fileName = `${sanitizedTitle}-${Date.now()}.jpg`; + const folderPath = 'recipes'; + + // Créer un objet file compatible avec uploadFile + const file = { + filename: fileName, + file: bufferToStream(imageBuffer) + }; + + // Uploader vers Minio + const filePath = await uploadFile(file, folderPath); + const minioUrl = await getFileUrl(filePath); + + // Ajouter l'URL à l'objet recette + recipeData.image_url = minioUrl; + + return recipeData; + } catch (error) { + fastify.log.error(`Erreur lors de la génération de recette: ${error.message}`); + throw error; + } }); // Gestion du téléchargement de fichiers audio fastify.decorate('saveAudioFile', async (file) => { - const uploadDir = './uploads'; - if (!fs.existsSync(uploadDir)) { - fs.mkdirSync(uploadDir); + try { + // Vérifier que le fichier est valide + if (!file || !file.filename) { + throw new Error("Fichier audio invalide"); + } + + // Préparer le nom de fichier + const fileName = `${Date.now()}-${file.filename}`; + const folderPath = 'audio'; + + // Si le fichier est déjà un stream, l'utiliser directement + // Sinon, le convertir en stream + const fileToUpload = { + filename: fileName, + file: file.file || bufferToStream(file) + }; + + // Uploader vers Minio + const filePath = await uploadFile(fileToUpload, folderPath); + const minioUrl = await getFileUrl(filePath); + + return { + success: true, + url: minioUrl, + path: filePath + }; + } catch (error) { + fastify.log.error(`Erreur lors de l'upload audio: ${error.message}`); + + // Fallback au stockage local + try { + const uploadDir = './uploads'; + if (!fs.existsSync(uploadDir)) { + fs.mkdirSync(uploadDir, { recursive: true }); + } + + const filename = `${Date.now()}-${file.filename}`; + const filepath = `${uploadDir}/${filename}`; + + // Gérer différents types d'entrée + if (Buffer.isBuffer(file.file)) { + fs.writeFileSync(filepath, file.file); + } else if (file.file && typeof file.file.pipe === 'function') { + await pump(file.file, fs.createWriteStream(filepath)); + } else if (Buffer.isBuffer(file)) { + fs.writeFileSync(filepath, file); + } else { + throw new Error("Format de fichier non pris en charge"); + } + + return { + success: true, + localPath: filepath, + isLocal: true + }; + } catch (localError) { + fastify.log.error(`Erreur lors du stockage local: ${localError.message}`); + return { + success: false, + error: `Erreur Minio: ${error.message}. Erreur locale: ${localError.message}` + }; + } } - - const filename = `${Date.now()}-${file.filename}`; - const filepath = `${uploadDir}/${filename}`; - - await pump(file.file, fs.createWriteStream(filepath)); - return filepath; }); }); \ No newline at end of file diff --git a/backend/src/routes/recipes.js b/backend/src/routes/recipes.js index ef99d6b..bc988a0 100644 --- a/backend/src/routes/recipes.js +++ b/backend/src/routes/recipes.js @@ -38,10 +38,13 @@ module.exports = async function (fastify, opts) { } // Sauvegarder le fichier audio - const audioPath = await fastify.saveAudioFile(data); + const audioResult = await fastify.saveAudioFile(data); + + // Extraire l'URL audio (chaîne de caractères) pour Prisma + const audioUrl = audioResult.url || (audioResult.localPath || null); // Transcrire l'audio - const transcription = await fastify.transcribeAudio(audioPath); + const transcription = await fastify.transcribeAudio(audioResult); // Extraire les ingrédients du texte transcrit const ingredients = transcription; @@ -72,7 +75,7 @@ module.exports = async function (fastify, opts) { difficulty: recipeData.difficulte, steps: stepsString, tips: recipeData.conseils, - audioUrl: audioPath, + audioUrl: audioUrl, userId: request.user.id } }); @@ -89,6 +92,7 @@ module.exports = async function (fastify, opts) { steps: recipe.steps, tips: recipe.tips, imageUrl: recipe.imageUrl, + audioUrl: audioUrl, createdAt: recipe.createdAt } }; diff --git a/backend/src/utils/storage.js b/backend/src/utils/storage.js new file mode 100644 index 0000000..852e7b4 --- /dev/null +++ b/backend/src/utils/storage.js @@ -0,0 +1,39 @@ +const Minio = require('minio'); + +const minioClient = new Minio.Client({ + endPoint: process.env.MINIO_ENDPOINT.replace(/^https?:\/\//, ''), + port: parseInt(process.env.MINIO_PORT), + useSSL: process.env.MINIO_USE_SSL === 'true', + accessKey: process.env.MINIO_ACCESS_KEY, + secretKey: process.env.MINIO_SECRET_KEY, +}); + +const uploadFile = async (file, folderPath) => { + const fileName = `${Date.now()}-${file.filename}`; + const filePath = `${folderPath}/${fileName}`; + await minioClient.putObject(process.env.MINIO_BUCKET, filePath, file.file); + return filePath; +}; + +const deleteFile = async (filePath) => { + await minioClient.removeObject(process.env.MINIO_BUCKET, filePath); +}; + +const getFile = async (filePath) => { + const file = await minioClient.getObject(process.env.MINIO_BUCKET, filePath); + return file; +}; + +const listFiles = async (folderPath) => { + const files = await minioClient.listObjects(process.env.MINIO_BUCKET, folderPath); + return files; +}; + +const getFileUrl = async (filePath) => { + const url = await minioClient.presignedUrl('GET', process.env.MINIO_BUCKET, filePath); + return url; +}; + + + +module.exports = { uploadFile, deleteFile, getFile, listFiles, getFileUrl }; diff --git a/backend/uploads/1741985930301-recording.mp3 b/backend/uploads/1741985930301-recording.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..814fd8c3193126589f77c439694febd7f314f88c GIT binary patch literal 20520 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 M0{Fka`JLB)0geK|CjbBd literal 0 HcmV?d00001 diff --git a/backend/uploads/1741986084481-recording.mp3 b/backend/uploads/1741986084481-recording.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..814fd8c3193126589f77c439694febd7f314f88c GIT binary patch literal 20520 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 M0{Fka`JLB)0geK|CjbBd literal 0 HcmV?d00001 diff --git a/backend/uploads/1742040018269-recording.mp3 b/backend/uploads/1742040018269-recording.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..6f0e56142404a2aa3e1ba7e3876e5b15b7d9774d GIT binary patch literal 19152 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