diff --git a/package-lock.json b/package-lock.json index 13e3ae9..a9fb65b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,7 +21,7 @@ "@nestjs/serve-static": "2.2.2", "@nestjs/swagger": "5.2.1", "@nestjs/terminus": "8.0.8", - "@nestjs/typeorm": "8.0.4", + "@nestjs/typeorm": "8.1.4", "@opentelemetry/api": "1.0.4", "@opentelemetry/context-async-hooks": "1.0.1", "@opentelemetry/exporter-prometheus": "0.27.0", @@ -46,7 +46,7 @@ "nest-raven": "8.1.0", "nestjs-otel": "3.0.4", "nestjs-pino": "2.6.0", - "nestjs-typeorm-paginate": "2.6.3", + "nestjs-typeorm-paginate": "4.0.1", "passport": "0.6.0", "passport-jwt": "4.0.0", "passport-spotify": "2.0.0", @@ -57,7 +57,7 @@ "rimraf": "3.0.2", "rxjs": "7.5.5", "swagger-ui-express": "4.4.0", - "typeorm": "0.2.41" + "typeorm": "0.3.6" }, "devDependencies": { "@nestjs/cli": "8.2.8", @@ -846,7 +846,7 @@ "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, + "devOptional": true, "dependencies": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -1468,7 +1468,7 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", - "dev": true, + "devOptional": true, "engines": { "node": ">=6.0.0" } @@ -1477,13 +1477,13 @@ "version": "1.4.13", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==", - "dev": true + "devOptional": true }, "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, + "devOptional": true, "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -1785,14 +1785,6 @@ "rxjs": "^6.0.0 || ^7.2.0" } }, - "node_modules/@nestjs/config/node_modules/dotenv": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz", - "integrity": "sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ==", - "engines": { - "node": ">=12" - } - }, "node_modules/@nestjs/core": { "version": "8.4.7", "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-8.4.7.tgz", @@ -2064,9 +2056,9 @@ } }, "node_modules/@nestjs/typeorm": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/@nestjs/typeorm/-/typeorm-8.0.4.tgz", - "integrity": "sha512-l1Fv+XicVFs7j4EKTq32lJ6QomYLlXZwvug9zcts6IBDVd8rYYBPy28pyBMDzLtnm0zD4tcW298rpylL7eTZtQ==", + "version": "8.1.4", + "resolved": "https://registry.npmjs.org/@nestjs/typeorm/-/typeorm-8.1.4.tgz", + "integrity": "sha512-hKv0Y9PG7YkHQfjsrNqM1s/VajlT7Mla8gaoblmuLzgMKsOQFsZXSHlXNxXZ8CA4aCPeDUiXtvqc4zocadGiIQ==", "dependencies": { "uuid": "8.3.2" }, @@ -2075,7 +2067,7 @@ "@nestjs/core": "^8.0.0", "reflect-metadata": "^0.1.13", "rxjs": "^7.2.0", - "typeorm": "^0.2.34" + "typeorm": "^0.3.0" } }, "node_modules/@nodelib/fs.scandir": { @@ -2836,25 +2828,25 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.7.tgz", "integrity": "sha512-aBvUmXLQbayM4w3A8TrjwrXs4DZ8iduJnuJLLRGdkWlyakCf1q6uHZJBzXoRA/huAEknG5tcUyQxN3A+In5euQ==", - "dev": true + "devOptional": true }, "node_modules/@tsconfig/node12": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.7.tgz", "integrity": "sha512-dgasobK/Y0wVMswcipr3k0HpevxFJLijN03A8mYfEPvWvOs14v0ZlYTR4kIgMx8g4+fTyTFv8/jLCIfRqLDJ4A==", - "dev": true + "devOptional": true }, "node_modules/@tsconfig/node14": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.0.tgz", "integrity": "sha512-RKkL8eTdPv6t5EHgFKIVQgsDapugbuOptNd9OOunN/HAkzmmTnZELx1kNCK0rSdUYGmiFMM3rRQMAWiyp023LQ==", - "dev": true + "devOptional": true }, "node_modules/@tsconfig/node16": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", - "dev": true + "devOptional": true }, "node_modules/@types/babel__core": { "version": "7.1.19", @@ -3180,11 +3172,6 @@ "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==", "dev": true }, - "node_modules/@types/zen-observable": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/@types/zen-observable/-/zen-observable-0.8.3.tgz", - "integrity": "sha512-fbF6oTd4sGGy0xjHPKAt+eS2CrxJ3+6gQ3FGcBoIJR2TLAyCkCyI8JqZNy+FeON0AhVgNJoUumVoZQjBFUqHkw==" - }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "5.29.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.29.0.tgz", @@ -3560,7 +3547,7 @@ "version": "8.7.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", - "dev": true, + "devOptional": true, "bin": { "acorn": "bin/acorn" }, @@ -3776,7 +3763,7 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true + "devOptional": true }, "node_modules/argparse": { "version": "1.0.10", @@ -4808,7 +4795,7 @@ "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 + "devOptional": true }, "node_modules/cron": { "version": "2.0.0", @@ -5012,7 +4999,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, + "devOptional": true, "engines": { "node": ">=0.3.1" } @@ -5072,11 +5059,11 @@ } }, "node_modules/dotenv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", - "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz", + "integrity": "sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ==", "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/dotenv-expand": { @@ -6648,14 +6635,14 @@ } }, "node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, @@ -9062,7 +9049,7 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "devOptional": true }, "node_modules/makeerror": { "version": "1.0.12", @@ -9309,31 +9296,12 @@ } }, "node_modules/nestjs-typeorm-paginate": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/nestjs-typeorm-paginate/-/nestjs-typeorm-paginate-2.6.3.tgz", - "integrity": "sha512-YxrqG3n7OXTjbSKqqceGhQc5MSaUKz8mCiT1gn3+wwYrrLCDS6B5QKGBm3NTx3GqZg16p48amlFGNH8MCHKvqw==", - "hasInstallScript": true, - "dependencies": { - "chalk": "^4.1.2" - }, + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nestjs-typeorm-paginate/-/nestjs-typeorm-paginate-4.0.1.tgz", + "integrity": "sha512-7rV+2UcaeSztHJFp5nXxJ/nax0GLUHFBO/TXW+oOVX+9YtUSaXknvDap33IENa151URCwgJh0jQ15RH9SLPIuw==", "peerDependencies": { "@nestjs/common": "^6.1.1 || ^5.6.2 || ^7.0.0 || ^8.0.0", - "typeorm": "^0.2.12" - } - }, - "node_modules/nestjs-typeorm-paginate/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "typeorm": "^0.3.0" } }, "node_modules/node-emoji": { @@ -11733,7 +11701,7 @@ "version": "10.8.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.8.1.tgz", "integrity": "sha512-Wwsnao4DQoJsN034wePSg5nZiw4YKXf56mPIAeD6wVmiv+RytNSWqc2f3fKvcUoV+Yn2+yocD71VOfQHbmVX4g==", - "dev": true, + "devOptional": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -11776,7 +11744,7 @@ "version": "8.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true, + "devOptional": true, "engines": { "node": ">=0.4.0" } @@ -11927,51 +11895,62 @@ } }, "node_modules/typeorm": { - "version": "0.2.41", - "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.2.41.tgz", - "integrity": "sha512-/d8CLJJxKPgsnrZWiMyPI0rz2MFZnBQrnQ5XP3Vu3mswv2WPexb58QM6BEtmRmlTMYN5KFWUz8SKluze+wS9xw==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.3.6.tgz", + "integrity": "sha512-DRqgfqcelMiGgWSMbBmVoJNFN2nPNA3EeY2gC324ndr2DZoGRTb9ILtp2oGVGnlA+cu5zgQ6it5oqKFNkte7Aw==", "dependencies": { "@sqltools/formatter": "^1.2.2", "app-root-path": "^3.0.0", "buffer": "^6.0.3", "chalk": "^4.1.0", "cli-highlight": "^2.1.11", - "debug": "^4.3.1", - "dotenv": "^8.2.0", - "glob": "^7.1.6", - "js-yaml": "^4.0.0", + "date-fns": "^2.28.0", + "debug": "^4.3.3", + "dotenv": "^16.0.0", + "glob": "^7.2.0", + "js-yaml": "^4.1.0", "mkdirp": "^1.0.4", "reflect-metadata": "^0.1.13", "sha.js": "^2.4.11", - "tslib": "^2.1.0", + "tslib": "^2.3.1", + "uuid": "^8.3.2", "xml2js": "^0.4.23", - "yargs": "^17.0.1", - "zen-observable-ts": "^1.0.0" + "yargs": "^17.3.1" }, "bin": { - "typeorm": "cli.js" + "typeorm": "cli.js", + "typeorm-ts-node-commonjs": "cli-ts-node-commonjs.js", + "typeorm-ts-node-esm": "cli-ts-node-esm.js" + }, + "engines": { + "node": ">= 12.9.0" }, "funding": { "url": "https://opencollective.com/typeorm" }, "peerDependencies": { - "@sap/hana-client": "*", - "better-sqlite3": "*", - "hdb-pool": "*", - "ioredis": "*", + "@google-cloud/spanner": "^5.18.0", + "@sap/hana-client": "^2.11.14", + "better-sqlite3": "^7.1.2", + "hdb-pool": "^0.1.6", + "ioredis": "^4.28.3", "mongodb": "^3.6.0", - "mssql": "*", - "mysql2": "*", - "oracledb": "*", - "pg": "*", - "pg-native": "*", - "pg-query-stream": "*", - "redis": "*", - "sql.js": "*", - "sqlite3": "*", - "typeorm-aurora-data-api-driver": "*" + "mssql": "^6.3.1", + "mysql2": "^2.2.5", + "oracledb": "^5.1.0", + "pg": "^8.5.1", + "pg-native": "^3.0.0", + "pg-query-stream": "^4.0.0", + "redis": "^3.1.1 || ^4.0.0", + "sql.js": "^1.4.0", + "sqlite3": "^5.0.2", + "ts-node": "^10.7.0", + "typeorm-aurora-data-api-driver": "^2.0.0" }, "peerDependenciesMeta": { + "@google-cloud/spanner": { + "optional": true + }, "@sap/hana-client": { "optional": true }, @@ -12014,6 +11993,9 @@ "sqlite3": { "optional": true }, + "ts-node": { + "optional": true + }, "typeorm-aurora-data-api-driver": { "optional": true } @@ -12113,7 +12095,7 @@ "version": "4.7.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", - "dev": true, + "devOptional": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -12211,7 +12193,7 @@ "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 + "devOptional": true }, "node_modules/v8-to-istanbul": { "version": "8.1.1", @@ -12635,7 +12617,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, + "devOptional": true, "engines": { "node": ">=6" } @@ -12651,20 +12633,6 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } - }, - "node_modules/zen-observable": { - "version": "0.8.15", - "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.15.tgz", - "integrity": "sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==" - }, - "node_modules/zen-observable-ts": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-1.1.0.tgz", - "integrity": "sha512-1h4zlLSqI2cRLPJUHJFL8bCWHhkpuXkF+dbGkRaWjgDIG26DmzyshUMrdV/rL3UnR+mhaX4fRq8LPouq0MYYIA==", - "dependencies": { - "@types/zen-observable": "0.8.3", - "zen-observable": "0.8.15" - } } }, "dependencies": { @@ -13243,7 +13211,7 @@ "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, + "devOptional": true, "requires": { "@jridgewell/trace-mapping": "0.3.9" } @@ -13735,19 +13703,19 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", - "dev": true + "devOptional": true }, "@jridgewell/sourcemap-codec": { "version": "1.4.13", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==", - "dev": true + "devOptional": true }, "@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, + "devOptional": true, "requires": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -13947,13 +13915,6 @@ "dotenv-expand": "8.0.3", "lodash": "4.17.21", "uuid": "8.3.2" - }, - "dependencies": { - "dotenv": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz", - "integrity": "sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ==" - } } }, "@nestjs/core": { @@ -14099,9 +14060,9 @@ } }, "@nestjs/typeorm": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/@nestjs/typeorm/-/typeorm-8.0.4.tgz", - "integrity": "sha512-l1Fv+XicVFs7j4EKTq32lJ6QomYLlXZwvug9zcts6IBDVd8rYYBPy28pyBMDzLtnm0zD4tcW298rpylL7eTZtQ==", + "version": "8.1.4", + "resolved": "https://registry.npmjs.org/@nestjs/typeorm/-/typeorm-8.1.4.tgz", + "integrity": "sha512-hKv0Y9PG7YkHQfjsrNqM1s/VajlT7Mla8gaoblmuLzgMKsOQFsZXSHlXNxXZ8CA4aCPeDUiXtvqc4zocadGiIQ==", "requires": { "uuid": "8.3.2" } @@ -14656,25 +14617,25 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.7.tgz", "integrity": "sha512-aBvUmXLQbayM4w3A8TrjwrXs4DZ8iduJnuJLLRGdkWlyakCf1q6uHZJBzXoRA/huAEknG5tcUyQxN3A+In5euQ==", - "dev": true + "devOptional": true }, "@tsconfig/node12": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.7.tgz", "integrity": "sha512-dgasobK/Y0wVMswcipr3k0HpevxFJLijN03A8mYfEPvWvOs14v0ZlYTR4kIgMx8g4+fTyTFv8/jLCIfRqLDJ4A==", - "dev": true + "devOptional": true }, "@tsconfig/node14": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.0.tgz", "integrity": "sha512-RKkL8eTdPv6t5EHgFKIVQgsDapugbuOptNd9OOunN/HAkzmmTnZELx1kNCK0rSdUYGmiFMM3rRQMAWiyp023LQ==", - "dev": true + "devOptional": true }, "@tsconfig/node16": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", - "dev": true + "devOptional": true }, "@types/babel__core": { "version": "7.1.19", @@ -15000,11 +14961,6 @@ "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==", "dev": true }, - "@types/zen-observable": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/@types/zen-observable/-/zen-observable-0.8.3.tgz", - "integrity": "sha512-fbF6oTd4sGGy0xjHPKAt+eS2CrxJ3+6gQ3FGcBoIJR2TLAyCkCyI8JqZNy+FeON0AhVgNJoUumVoZQjBFUqHkw==" - }, "@typescript-eslint/eslint-plugin": { "version": "5.29.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.29.0.tgz", @@ -15285,7 +15241,7 @@ "version": "8.7.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", - "dev": true + "devOptional": true }, "acorn-globals": { "version": "6.0.0", @@ -15439,7 +15395,7 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true + "devOptional": true }, "argparse": { "version": "1.0.10", @@ -16206,7 +16162,7 @@ "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 + "devOptional": true }, "cron": { "version": "2.0.0", @@ -16363,7 +16319,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true + "devOptional": true }, "diff-sequences": { "version": "27.5.1", @@ -16407,9 +16363,9 @@ } }, "dotenv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", - "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==" + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz", + "integrity": "sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ==" }, "dotenv-expand": { "version": "8.0.3", @@ -17608,14 +17564,14 @@ } }, "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } @@ -19414,7 +19370,7 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "devOptional": true }, "makeerror": { "version": "1.0.12", @@ -19601,23 +19557,10 @@ "requires": {} }, "nestjs-typeorm-paginate": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/nestjs-typeorm-paginate/-/nestjs-typeorm-paginate-2.6.3.tgz", - "integrity": "sha512-YxrqG3n7OXTjbSKqqceGhQc5MSaUKz8mCiT1gn3+wwYrrLCDS6B5QKGBm3NTx3GqZg16p48amlFGNH8MCHKvqw==", - "requires": { - "chalk": "^4.1.2" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nestjs-typeorm-paginate/-/nestjs-typeorm-paginate-4.0.1.tgz", + "integrity": "sha512-7rV+2UcaeSztHJFp5nXxJ/nax0GLUHFBO/TXW+oOVX+9YtUSaXknvDap33IENa151URCwgJh0jQ15RH9SLPIuw==", + "requires": {} }, "node-emoji": { "version": "1.11.0", @@ -21409,7 +21352,7 @@ "version": "10.8.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.8.1.tgz", "integrity": "sha512-Wwsnao4DQoJsN034wePSg5nZiw4YKXf56mPIAeD6wVmiv+RytNSWqc2f3fKvcUoV+Yn2+yocD71VOfQHbmVX4g==", - "dev": true, + "devOptional": true, "requires": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -21430,7 +21373,7 @@ "version": "8.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true + "devOptional": true } } }, @@ -21553,26 +21496,27 @@ } }, "typeorm": { - "version": "0.2.41", - "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.2.41.tgz", - "integrity": "sha512-/d8CLJJxKPgsnrZWiMyPI0rz2MFZnBQrnQ5XP3Vu3mswv2WPexb58QM6BEtmRmlTMYN5KFWUz8SKluze+wS9xw==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.3.6.tgz", + "integrity": "sha512-DRqgfqcelMiGgWSMbBmVoJNFN2nPNA3EeY2gC324ndr2DZoGRTb9ILtp2oGVGnlA+cu5zgQ6it5oqKFNkte7Aw==", "requires": { "@sqltools/formatter": "^1.2.2", "app-root-path": "^3.0.0", "buffer": "^6.0.3", "chalk": "^4.1.0", "cli-highlight": "^2.1.11", - "debug": "^4.3.1", - "dotenv": "^8.2.0", - "glob": "^7.1.6", - "js-yaml": "^4.0.0", + "date-fns": "^2.28.0", + "debug": "^4.3.3", + "dotenv": "^16.0.0", + "glob": "^7.2.0", + "js-yaml": "^4.1.0", "mkdirp": "^1.0.4", "reflect-metadata": "^0.1.13", "sha.js": "^2.4.11", - "tslib": "^2.1.0", + "tslib": "^2.3.1", + "uuid": "^8.3.2", "xml2js": "^0.4.23", - "yargs": "^17.0.1", - "zen-observable-ts": "^1.0.0" + "yargs": "^17.3.1" }, "dependencies": { "argparse": { @@ -21636,7 +21580,7 @@ "version": "4.7.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", - "dev": true + "devOptional": true }, "uid2": { "version": "0.0.3", @@ -21712,7 +21656,7 @@ "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 + "devOptional": true }, "v8-to-istanbul": { "version": "8.1.1", @@ -22026,27 +21970,13 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true + "devOptional": true }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true - }, - "zen-observable": { - "version": "0.8.15", - "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.15.tgz", - "integrity": "sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==" - }, - "zen-observable-ts": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-1.1.0.tgz", - "integrity": "sha512-1h4zlLSqI2cRLPJUHJFL8bCWHhkpuXkF+dbGkRaWjgDIG26DmzyshUMrdV/rL3UnR+mhaX4fRq8LPouq0MYYIA==", - "requires": { - "@types/zen-observable": "0.8.3", - "zen-observable": "0.8.15" - } } } } diff --git a/package.json b/package.json index f11f4fa..ff5758a 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "@nestjs/serve-static": "2.2.2", "@nestjs/swagger": "5.2.1", "@nestjs/terminus": "8.0.8", - "@nestjs/typeorm": "8.0.4", + "@nestjs/typeorm": "8.1.4", "@opentelemetry/api": "1.0.4", "@opentelemetry/context-async-hooks": "1.0.1", "@opentelemetry/exporter-prometheus": "0.27.0", @@ -62,7 +62,7 @@ "nest-raven": "8.1.0", "nestjs-otel": "3.0.4", "nestjs-pino": "2.6.0", - "nestjs-typeorm-paginate": "2.6.3", + "nestjs-typeorm-paginate": "4.0.1", "passport": "0.6.0", "passport-jwt": "4.0.0", "passport-spotify": "2.0.0", @@ -73,7 +73,7 @@ "rimraf": "3.0.2", "rxjs": "7.5.5", "swagger-ui-express": "4.4.0", - "typeorm": "0.2.41" + "typeorm": "0.3.6" }, "devDependencies": { "@nestjs/cli": "8.2.8", diff --git a/src/auth/auth-session.repository.ts b/src/auth/auth-session.repository.ts index 46fb40a..b7769c7 100644 --- a/src/auth/auth-session.repository.ts +++ b/src/auth/auth-session.repository.ts @@ -1,5 +1,6 @@ /* eslint-disable max-classes-per-file */ -import { EntityRepository, Repository, SelectQueryBuilder } from "typeorm"; +import { Repository, SelectQueryBuilder } from "typeorm"; +import { EntityRepository } from "../database/entity-repository"; import { User } from "../users/user.entity"; import { AuthSession } from "./auth-session.entity"; diff --git a/src/auth/auth.module.ts b/src/auth/auth.module.ts index b4f0a1c..054880d 100644 --- a/src/auth/auth.module.ts +++ b/src/auth/auth.module.ts @@ -2,8 +2,8 @@ import { MiddlewareConsumer, Module, NestModule } from "@nestjs/common"; import { ConfigService } from "@nestjs/config"; import { JwtModule } from "@nestjs/jwt"; import { PassportModule } from "@nestjs/passport"; -import { TypeOrmModule } from "@nestjs/typeorm"; import { CookieParserMiddleware } from "../cookie-parser"; +import { TypeOrmRepositoryModule } from "../database/entity-repository/typeorm-repository.module"; import { UsersModule } from "../users/users.module"; import { AuthSessionRepository } from "./auth-session.repository"; import { AuthController } from "./auth.controller"; @@ -14,7 +14,7 @@ import { SpotifyStrategy } from "./strategies/spotify.strategy"; @Module({ imports: [ - TypeOrmModule.forFeature([AuthSessionRepository]), + TypeOrmRepositoryModule.for([AuthSessionRepository]), PassportModule.register({ defaultStrategy: "jwt" }), JwtModule.registerAsync({ useFactory: (config: ConfigService) => ({ diff --git a/src/auth/auth.service.spec.ts b/src/auth/auth.service.spec.ts index b6461e4..e5f7f7d 100644 --- a/src/auth/auth.service.spec.ts +++ b/src/auth/auth.service.spec.ts @@ -248,7 +248,7 @@ describe("AuthService", () => { beforeEach(() => { session = { id: "AUTH_SESSION" } as AuthSession; - authSessionRepository.findOne = jest.fn().mockResolvedValue(session); + authSessionRepository.findOneBy = jest.fn().mockResolvedValue(session); }); it("returns the session", async () => { @@ -256,10 +256,10 @@ describe("AuthService", () => { session ); - expect(authSessionRepository.findOne).toHaveBeenCalledTimes(1); - expect(authSessionRepository.findOne).toHaveBeenLastCalledWith( - "AUTH_SESSION" - ); + expect(authSessionRepository.findOneBy).toHaveBeenCalledTimes(1); + expect(authSessionRepository.findOneBy).toHaveBeenLastCalledWith({ + id: "AUTH_SESSION", + }); }); }); diff --git a/src/auth/auth.service.ts b/src/auth/auth.service.ts index a5b628b..8208a3a 100644 --- a/src/auth/auth.service.ts +++ b/src/auth/auth.service.ts @@ -98,7 +98,7 @@ export class AuthService { } async findSession(id: string): Promise { - return this.authSessionRepository.findOne(id); + return this.authSessionRepository.findOneBy({ id }); } async findUser(id: string): Promise { diff --git a/src/database/entity-repository/README.md b/src/database/entity-repository/README.md new file mode 100644 index 0000000..cd7c712 --- /dev/null +++ b/src/database/entity-repository/README.md @@ -0,0 +1,4 @@ +This module restores the classes-based custom Repository functionality from +typeorm v0.2. + +Directly adapted from anchan828: https://gist.github.com/anchan828/9e569f076e7bc18daf21c652f7c3d012 diff --git a/src/database/entity-repository/entity-repository.decorator.ts b/src/database/entity-repository/entity-repository.decorator.ts new file mode 100644 index 0000000..b4bd818 --- /dev/null +++ b/src/database/entity-repository/entity-repository.decorator.ts @@ -0,0 +1,7 @@ +import { SetMetadata } from "@nestjs/common"; + +export const TYPEORM_ENTITY_REPOSITORY = "TYPEORM_ENTITY_REPOSITORY"; + +export function EntityRepository(entity: Function): ClassDecorator { + return SetMetadata(TYPEORM_ENTITY_REPOSITORY, entity); +} diff --git a/src/database/entity-repository/index.ts b/src/database/entity-repository/index.ts new file mode 100644 index 0000000..28c7b6e --- /dev/null +++ b/src/database/entity-repository/index.ts @@ -0,0 +1,3 @@ +import { EntityRepository } from "./entity-repository.decorator"; + +export { EntityRepository }; diff --git a/src/database/entity-repository/typeorm-repository.module.ts b/src/database/entity-repository/typeorm-repository.module.ts new file mode 100644 index 0000000..b064702 --- /dev/null +++ b/src/database/entity-repository/typeorm-repository.module.ts @@ -0,0 +1,39 @@ +import { DynamicModule, Provider } from "@nestjs/common"; +import { getDataSourceToken } from "@nestjs/typeorm"; +import { DataSource } from "typeorm"; +import { TYPEORM_ENTITY_REPOSITORY } from "./entity-repository.decorator"; + +export class TypeOrmRepositoryModule { + public static for any>( + repositories: T[] + ): DynamicModule { + const providers: Provider[] = []; + + for (const repository of repositories) { + const entity = Reflect.getMetadata(TYPEORM_ENTITY_REPOSITORY, repository); + + if (!entity) { + continue; + } + + providers.push({ + inject: [getDataSourceToken()], + provide: repository, + useFactory: (dataSource: DataSource): typeof repository => { + const baseRepository = dataSource.getRepository(entity); + return new repository( + baseRepository.target, + baseRepository.manager, + baseRepository.queryRunner + ); + }, + }); + } + + return { + exports: providers, + module: TypeOrmRepositoryModule, + providers, + }; + } +} diff --git a/src/listens/listen.repository.ts b/src/listens/listen.repository.ts index 5503347..3866def 100644 --- a/src/listens/listen.repository.ts +++ b/src/listens/listen.repository.ts @@ -1,5 +1,6 @@ /* eslint-disable max-classes-per-file */ -import { EntityRepository, Repository, SelectQueryBuilder } from "typeorm"; +import { Repository, SelectQueryBuilder } from "typeorm"; +import { EntityRepository } from "../database/entity-repository"; import { Interval } from "../reports/interval"; import { User } from "../users/user.entity"; import { @@ -57,13 +58,13 @@ export class ListenRepository extends Repository { if (!insertedRowIdentifier) { // We did not insert a new listen, it already existed return { - listen: await this.findOne({ where: { user, track, playedAt } }), + listen: await this.findOneBy({ user, track, playedAt }), isDuplicate: true, }; } return { - listen: await this.findOne(insertedRowIdentifier.id), + listen: await this.findOneBy({ id: insertedRowIdentifier.id }), isDuplicate: false, }; } diff --git a/src/listens/listens.module.ts b/src/listens/listens.module.ts index 870ff82..7144b69 100644 --- a/src/listens/listens.module.ts +++ b/src/listens/listens.module.ts @@ -1,11 +1,11 @@ import { Module } from "@nestjs/common"; -import { TypeOrmModule } from "@nestjs/typeorm"; +import { TypeOrmRepositoryModule } from "../database/entity-repository/typeorm-repository.module"; import { ListenRepository } from "./listen.repository"; import { ListensController } from "./listens.controller"; import { ListensService } from "./listens.service"; @Module({ - imports: [TypeOrmModule.forFeature([ListenRepository])], + imports: [TypeOrmRepositoryModule.for([ListenRepository])], providers: [ListensService], exports: [ListensService], controllers: [ListensController], diff --git a/src/music-library/album.repository.ts b/src/music-library/album.repository.ts index 805e9a9..de36723 100644 --- a/src/music-library/album.repository.ts +++ b/src/music-library/album.repository.ts @@ -1,4 +1,5 @@ -import { EntityRepository, Repository } from "typeorm"; +import { Repository } from "typeorm"; +import { EntityRepository } from "../database/entity-repository"; import { Album } from "./album.entity"; @EntityRepository(Album) diff --git a/src/music-library/artist.repository.ts b/src/music-library/artist.repository.ts index cbe90f0..12e6906 100644 --- a/src/music-library/artist.repository.ts +++ b/src/music-library/artist.repository.ts @@ -1,4 +1,5 @@ -import { EntityRepository, Repository } from "typeorm"; +import { Repository } from "typeorm"; +import { EntityRepository } from "../database/entity-repository"; import { Artist } from "./artist.entity"; @EntityRepository(Artist) diff --git a/src/music-library/genre.repository.ts b/src/music-library/genre.repository.ts index b3e32d6..dfacb17 100644 --- a/src/music-library/genre.repository.ts +++ b/src/music-library/genre.repository.ts @@ -1,4 +1,5 @@ -import { EntityRepository, Repository } from "typeorm"; +import { Repository } from "typeorm"; +import { EntityRepository } from "../database/entity-repository"; import { Genre } from "./genre.entity"; @EntityRepository(Genre) diff --git a/src/music-library/music-library.module.ts b/src/music-library/music-library.module.ts index 8c95e63..1993378 100644 --- a/src/music-library/music-library.module.ts +++ b/src/music-library/music-library.module.ts @@ -1,5 +1,5 @@ import { Module } from "@nestjs/common"; -import { TypeOrmModule } from "@nestjs/typeorm"; +import { TypeOrmRepositoryModule } from "../database/entity-repository/typeorm-repository.module"; import { AlbumRepository } from "./album.repository"; import { ArtistRepository } from "./artist.repository"; import { GenreRepository } from "./genre.repository"; @@ -8,7 +8,7 @@ import { TrackRepository } from "./track.repository"; @Module({ imports: [ - TypeOrmModule.forFeature([ + TypeOrmRepositoryModule.for([ AlbumRepository, ArtistRepository, GenreRepository, diff --git a/src/music-library/music-library.service.spec.ts b/src/music-library/music-library.service.spec.ts index b0a14c7..ae4ca5c 100644 --- a/src/music-library/music-library.service.spec.ts +++ b/src/music-library/music-library.service.spec.ts @@ -54,15 +54,15 @@ describe("MusicLibraryService", () => { const artist = { id: "ARTIST", }; - artistRepository.findOne = jest.fn().mockResolvedValue(artist); + artistRepository.findOneBy = jest.fn().mockResolvedValue(artist); await expect( service.findArtist({ spotify: { id: "spotify_artist" } }) ).resolves.toEqual(artist); - expect(artistRepository.findOne).toHaveBeenCalledTimes(1); - expect(artistRepository.findOne).toHaveBeenCalledWith({ - where: { spotify: { id: "spotify_artist" } }, + expect(artistRepository.findOneBy).toHaveBeenCalledTimes(1); + expect(artistRepository.findOneBy).toHaveBeenCalledWith({ + spotify: { id: "spotify_artist" }, }); }); }); @@ -195,15 +195,15 @@ describe("MusicLibraryService", () => { const album = { id: "ALBUM", }; - albumRepository.findOne = jest.fn().mockResolvedValue(album); + albumRepository.findOneBy = jest.fn().mockResolvedValue(album); await expect( service.findAlbum({ spotify: { id: "spotify_album" } }) ).resolves.toEqual(album); - expect(albumRepository.findOne).toHaveBeenCalledTimes(1); - expect(albumRepository.findOne).toHaveBeenCalledWith({ - where: { spotify: { id: "spotify_album" } }, + expect(albumRepository.findOneBy).toHaveBeenCalledTimes(1); + expect(albumRepository.findOneBy).toHaveBeenCalledWith({ + spotify: { id: "spotify_album" }, }); }); }); @@ -284,15 +284,15 @@ describe("MusicLibraryService", () => { id: "GENRE", name: "Foo", }; - genreRepository.findOne = jest.fn().mockResolvedValue(genre); + genreRepository.findOneBy = jest.fn().mockResolvedValue(genre); await expect(service.findGenre({ name: "Foo" })).resolves.toEqual( genre ); - expect(genreRepository.findOne).toHaveBeenCalledTimes(1); - expect(genreRepository.findOne).toHaveBeenCalledWith({ - where: { name: "Foo" }, + expect(genreRepository.findOneBy).toHaveBeenCalledTimes(1); + expect(genreRepository.findOneBy).toHaveBeenCalledWith({ + name: "Foo", }); }); }); @@ -369,15 +369,15 @@ describe("MusicLibraryService", () => { const track = { id: "TRACK", }; - trackRepository.findOne = jest.fn().mockResolvedValue(track); + trackRepository.findOneBy = jest.fn().mockResolvedValue(track); await expect( service.findTrack({ spotify: { id: "spotify_track" } }) ).resolves.toEqual(track); - expect(trackRepository.findOne).toHaveBeenCalledTimes(1); - expect(trackRepository.findOne).toHaveBeenCalledWith({ - where: { spotify: { id: "spotify_track" } }, + expect(trackRepository.findOneBy).toHaveBeenCalledTimes(1); + expect(trackRepository.findOneBy).toHaveBeenCalledWith({ + spotify: { id: "spotify_track" }, }); }); }); diff --git a/src/music-library/music-library.service.ts b/src/music-library/music-library.service.ts index 44498a7..1e9b1a6 100644 --- a/src/music-library/music-library.service.ts +++ b/src/music-library/music-library.service.ts @@ -28,8 +28,8 @@ export class MusicLibraryService { ) {} async findArtist(query: FindArtistDto): Promise { - return this.artistRepository.findOne({ - where: { spotify: { id: query.spotify.id } }, + return this.artistRepository.findOneBy({ + spotify: { id: query.spotify.id }, }); } @@ -81,8 +81,8 @@ export class MusicLibraryService { } async findAlbum(query: FindAlbumDto): Promise { - return this.albumRepository.findOne({ - where: { spotify: { id: query.spotify.id } }, + return this.albumRepository.findOneBy({ + spotify: { id: query.spotify.id }, }); } @@ -112,8 +112,8 @@ export class MusicLibraryService { } async findGenre(query: FindGenreDto): Promise { - return this.genreRepository.findOne({ - where: { name: query.name }, + return this.genreRepository.findOneBy({ + name: query.name, }); } @@ -141,8 +141,8 @@ export class MusicLibraryService { } async findTrack(query: FindTrackDto): Promise { - return this.trackRepository.findOne({ - where: { spotify: { id: query.spotify.id } }, + return this.trackRepository.findOneBy({ + spotify: { id: query.spotify.id }, }); } diff --git a/src/music-library/track.repository.ts b/src/music-library/track.repository.ts index 3e37cf7..0a770ae 100644 --- a/src/music-library/track.repository.ts +++ b/src/music-library/track.repository.ts @@ -1,4 +1,5 @@ -import { EntityRepository, Repository } from "typeorm"; +import { Repository } from "typeorm"; +import { EntityRepository } from "../database/entity-repository"; import { Track } from "./track.entity"; @EntityRepository(Track) diff --git a/src/users/user.repository.ts b/src/users/user.repository.ts index 023ff9f..41e2bee 100644 --- a/src/users/user.repository.ts +++ b/src/users/user.repository.ts @@ -1,4 +1,5 @@ -import { EntityRepository, Repository } from "typeorm"; +import { Repository } from "typeorm"; +import { EntityRepository } from "../database/entity-repository"; import { User } from "./user.entity"; @EntityRepository(User) diff --git a/src/users/users.module.ts b/src/users/users.module.ts index fbd4e6e..f7f8262 100644 --- a/src/users/users.module.ts +++ b/src/users/users.module.ts @@ -1,11 +1,11 @@ import { Module } from "@nestjs/common"; -import { TypeOrmModule } from "@nestjs/typeorm"; import { UserRepository } from "./user.repository"; import { UsersService } from "./users.service"; import { UsersController } from "./users.controller"; +import { TypeOrmRepositoryModule } from "../database/entity-repository/typeorm-repository.module"; @Module({ - imports: [TypeOrmModule.forFeature([UserRepository])], + imports: [TypeOrmRepositoryModule.for([UserRepository])], providers: [UsersService], exports: [UsersService], controllers: [UsersController], diff --git a/src/users/users.service.ts b/src/users/users.service.ts index b8d711f..f8ec188 100644 --- a/src/users/users.service.ts +++ b/src/users/users.service.ts @@ -9,7 +9,7 @@ export class UsersService { constructor(private readonly userRepository: UserRepository) {} async findById(id: string): Promise { - const user = await this.userRepository.findOne(id); + const user = await this.userRepository.findOneBy({ id }); if (!user) { throw new NotFoundException("UserNotFound"); @@ -23,8 +23,8 @@ export class UsersService { } async createOrUpdate(data: CreateOrUpdateDto): Promise { - let user = await this.userRepository.findOne({ - where: { spotify: { id: data.spotify.id } }, + let user = await this.userRepository.findOneBy({ + spotify: { id: data.spotify.id }, }); if (!user) {