From 529885d9d416d4a686c7ee00a1c5c85464cccf88 Mon Sep 17 00:00:00 2001 From: ange Date: Tue, 22 Oct 2024 22:47:43 +0700 Subject: [PATCH] FIX: back-end db connection --- back-end/Dockerfile | 8 +- back-end/README.md | 2 +- back-end/api/{login.js => login.ts} | 0 back-end/api/{register.js => register.ts} | 0 back-end/bun.lockb | Bin 157709 -> 151459 bytes back-end/{index.js => index.ts} | 0 back-end/package-lock.json | 842 ------------------ back-end/package.json | 16 +- .../prisma/migrations/migration_lock.toml | 3 - back-end/prisma/schema.prisma | 2 +- compose.yaml | 9 +- 11 files changed, 17 insertions(+), 865 deletions(-) rename back-end/api/{login.js => login.ts} (100%) rename back-end/api/{register.js => register.ts} (100%) rename back-end/{index.js => index.ts} (100%) delete mode 100644 back-end/package-lock.json delete mode 100644 back-end/prisma/migrations/migration_lock.toml diff --git a/back-end/Dockerfile b/back-end/Dockerfile index e10d115..0eff084 100644 --- a/back-end/Dockerfile +++ b/back-end/Dockerfile @@ -2,9 +2,9 @@ FROM docker.io/oven/bun:1.1-slim WORKDIR /app/ COPY package.json bun.lockb . RUN bun install -COPY api/ api/ -COPY index.js . COPY prisma/ prisma/ -COPY .env . +RUN bunx prisma generate +COPY api/ api/ +COPY index.ts . EXPOSE 3000 -CMD ["bun", "index.js"] \ No newline at end of file +CMD ["bun", "index.ts"] diff --git a/back-end/README.md b/back-end/README.md index 7d4b4f4..9c6bf0c 100644 --- a/back-end/README.md +++ b/back-end/README.md @@ -12,4 +12,4 @@ To run: bun run index.ts ``` -This project was created using `bun init` in bun v1.1.18. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime. +This project was created using `bun init` in bun v1.1.32. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime. diff --git a/back-end/api/login.js b/back-end/api/login.ts similarity index 100% rename from back-end/api/login.js rename to back-end/api/login.ts diff --git a/back-end/api/register.js b/back-end/api/register.ts similarity index 100% rename from back-end/api/register.js rename to back-end/api/register.ts diff --git a/back-end/bun.lockb b/back-end/bun.lockb index 564567e0be14c46ead0825394f05fd7dbc48ffdf..bd926c8358acdda0278df2c76e593843325caa57 100755 GIT binary patch delta 36301 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 P_-01*USRhGe)|6b>d`jW delta 39190 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≠VA`;?M1W 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 diff --git a/back-end/index.js b/back-end/index.ts similarity index 100% rename from back-end/index.js rename to back-end/index.ts diff --git a/back-end/package-lock.json b/back-end/package-lock.json deleted file mode 100644 index 1107f34..0000000 --- a/back-end/package-lock.json +++ /dev/null @@ -1,842 +0,0 @@ -{ - "name": "back-end", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "back-end", - "dependencies": { - "@prisma/client": "5.19.1", - "express": "^4.21.0" - }, - "devDependencies": { - "@types/bun": "latest", - "prisma": "5.19.1" - }, - "peerDependencies": { - "typescript": "^5.0.0" - } - }, - "node_modules/@prisma/client": { - "version": "5.19.1", - "hasInstallScript": true, - "license": "Apache-2.0", - "engines": { - "node": ">=16.13" - }, - "peerDependencies": { - "prisma": "*" - }, - "peerDependenciesMeta": { - "prisma": { - "optional": true - } - } - }, - "node_modules/@prisma/debug": { - "version": "5.19.1", - "devOptional": true, - "license": "Apache-2.0" - }, - "node_modules/@prisma/engines": { - "version": "5.19.1", - "devOptional": true, - "hasInstallScript": true, - "license": "Apache-2.0", - "dependencies": { - "@prisma/debug": "5.19.1", - "@prisma/engines-version": "5.19.1-2.69d742ee20b815d88e17e54db4a2a7a3b30324e3", - "@prisma/fetch-engine": "5.19.1", - "@prisma/get-platform": "5.19.1" - } - }, - "node_modules/@prisma/engines-version": { - "version": "5.19.1-2.69d742ee20b815d88e17e54db4a2a7a3b30324e3", - "devOptional": true, - "license": "Apache-2.0" - }, - "node_modules/@prisma/fetch-engine": { - "version": "5.19.1", - "devOptional": true, - "license": "Apache-2.0", - "dependencies": { - "@prisma/debug": "5.19.1", - "@prisma/engines-version": "5.19.1-2.69d742ee20b815d88e17e54db4a2a7a3b30324e3", - "@prisma/get-platform": "5.19.1" - } - }, - "node_modules/@prisma/get-platform": { - "version": "5.19.1", - "devOptional": true, - "license": "Apache-2.0", - "dependencies": { - "@prisma/debug": "5.19.1" - } - }, - "node_modules/@types/bun": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@types/bun/-/bun-1.1.9.tgz", - "integrity": "sha512-SXJRejXpmAc3qxyN/YS4/JGWEzLf4dDBa5fLtRDipQXHqNccuMU4EUYCooXNTsylG0DmwFQsGgEDHxZF+3DqRw==", - "dev": true, - "dependencies": { - "bun-types": "1.1.27" - } - }, - "node_modules/@types/node": { - "version": "20.12.14", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.14.tgz", - "integrity": "sha512-scnD59RpYD91xngrQQLGkE+6UrHUPzeKZWhhjBSa3HSkwjbQc38+q3RoIVEwxQGRw3M+j5hpNAM+lgV3cVormg==", - "dev": true, - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/ws": { - "version": "8.5.12", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz", - "integrity": "sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/bun-types": { - "version": "1.1.27", - "resolved": "https://registry.npmjs.org/bun-types/-/bun-types-1.1.27.tgz", - "integrity": "sha512-rHXAiIDefeMS/fleNM1rRDYqolJGNRdch3+AuCRwcZWaqTa1vjGBNsahH/HVV7Y82frllYhJomCVSEiHzLzkgg==", - "dev": true, - "dependencies": { - "@types/node": "~20.12.8", - "@types/ws": "~8.5.10" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.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==", - "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/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", - "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.6.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.10", - "proxy-addr": "~2.0.7", - "qs": "6.13.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-to-regexp": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", - "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==" - }, - "node_modules/prisma": { - "version": "5.19.1", - "devOptional": true, - "hasInstallScript": true, - "license": "Apache-2.0", - "dependencies": { - "@prisma/engines": "5.19.1" - }, - "bin": { - "prisma": "build/index.js" - }, - "engines": { - "node": ">=16.13" - }, - "optionalDependencies": { - "fsevents": "2.3.3" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", - "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "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==", - "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/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typescript": { - "version": "5.5.4", - "license": "Apache-2.0", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } - } - } -} diff --git a/back-end/package.json b/back-end/package.json index d940fcb..7fd257f 100644 --- a/back-end/package.json +++ b/back-end/package.json @@ -3,19 +3,19 @@ "module": "index.ts", "type": "module", "devDependencies": { - "@types/bun": "latest" + "@types/bun": "latest", + "jest": "^29.7.0", + "prisma": "^5.21.1" }, "peerDependencies": { - "typescript": "^5.0.0" + "typescript": "^5.6.3" }, "dependencies": { - "@prisma/client": "^5.20.0", - "@types/express": "^4.17.21", + "@prisma/client": "^5.21.1", + "@types/express": "^5.0.0", "cors": "^2.8.5", - "express": "^4.21.0", - "jest": "^29.7.0", - "jsonwebtoken": "^9.0.2", - "supertest": "^7.0.0" + "express": "^4.21.1", + "jsonwebtoken": "^9.0.2" }, "scripts": { "test": "jest" diff --git a/back-end/prisma/migrations/migration_lock.toml b/back-end/prisma/migrations/migration_lock.toml deleted file mode 100644 index fbffa92..0000000 --- a/back-end/prisma/migrations/migration_lock.toml +++ /dev/null @@ -1,3 +0,0 @@ -# Please do not edit this file manually -# It should be added in your version-control system (i.e. Git) -provider = "postgresql" \ No newline at end of file diff --git a/back-end/prisma/schema.prisma b/back-end/prisma/schema.prisma index ff5e129..76c6c03 100644 --- a/back-end/prisma/schema.prisma +++ b/back-end/prisma/schema.prisma @@ -9,7 +9,7 @@ generator client { } datasource db { - provider = "postgres" + provider = "postgresql" url = env("DATABASE_URL") } diff --git a/compose.yaml b/compose.yaml index cf99b86..9cbbede 100644 --- a/compose.yaml +++ b/compose.yaml @@ -6,7 +6,7 @@ services: ports: - "8000:5173" environment: - - PROD_URL=${PROD_URL} + - PROD_URL depends_on: - back-end @@ -18,12 +18,9 @@ services: command: - sh - -c - - "bunx prisma migrate deploy && bunx prisma generate && bun index.js" + - "bunx prisma migrate deploy && bun index.ts" environment: - - POSTGRES_DB - - POSTGRES_USER - - POSTGRES_PASSWORD - - POSTGRES_HOST=db + - DATABASE_URL=postgresql://$POSTGRES_USER:$POSTGRES_PASSWORD@db/$POSTGRES_DB depends_on: - redis - db