From a5868f1ba174ef18982f4930ee42c4a484b21e98 Mon Sep 17 00:00:00 2001 From: yeseul106 <20191037@sungshin.ac.kr> Date: Sun, 31 Mar 2024 20:44:04 +0900 Subject: [PATCH 1/3] =?UTF-8?q?[CHORE]=20nest.js=20=EC=9D=98=EC=A1=B4?= =?UTF-8?q?=EC=84=B1=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 6 + server/package-lock.json | 290 ++++----------------------------------- server/package.json | 4 +- 3 files changed, 35 insertions(+), 265 deletions(-) create mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..37781e6b --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "sopt-crew-backend", + "lockfileVersion": 2, + "requires": true, + "packages": {} +} diff --git a/server/package-lock.json b/server/package-lock.json index 6602267e..49a86bf3 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -1,12 +1,12 @@ { "name": "sopt_web_product_server", - "version": "1.1.2", + "version": "1.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "sopt_web_product_server", - "version": "1.1.2", + "version": "1.1.0", "license": "UNLICENSED", "dependencies": { "@aws-sdk/client-s3": "^3.540.0", @@ -32,7 +32,7 @@ "dayjs": "^1.11.10", "json2csv": "^6.0.0-alpha.2", "multer": "^1.4.5-lts.1", - "multer-s3": "^3.0.1", + "multer-s3": "^2.10.0", "passport": "^0.7.0", "passport-jwt": "^4.0.1", "path": "^0.12.7", @@ -1042,84 +1042,6 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/is-array-buffer": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.188.0.tgz", - "integrity": "sha512-n69N4zJZCNd87Rf4NzufPzhactUeM877Y0Tp/F3KiHqGeTnVjYUa4Lv1vLBjqtfjYb2HWT3NKlYn5yzrhaEwiQ==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.3.1" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/@aws-sdk/lib-storage": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.188.0.tgz", - "integrity": "sha512-6odOJn3Gvb4ty8/tUg2PZ9W1XRfXN0buubFZZ8HOuovOVk1PnaxZMYXbo0MGComizFMOBefK5LxBNXHXl/81yQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/middleware-endpoint": "3.188.0", - "@aws-sdk/smithy-client": "3.188.0", - "buffer": "5.6.0", - "events": "3.3.0", - "stream-browserify": "3.0.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">= 12.0.0" - }, - "peerDependencies": { - "@aws-sdk/abort-controller": "^3.0.0", - "@aws-sdk/client-s3": "^3.0.0" - } - }, - "node_modules/@aws-sdk/lib-storage/node_modules/@aws-sdk/middleware-stack": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.188.0.tgz", - "integrity": "sha512-HuqP7hVnnx+aHfE6TutlMgjF0b2Ft08s9CDwyZ7ZhmYodQv/iPba7OGL4qz44oq7mdqlltN9sJkXczSAw0Zbaw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.3.1" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/@aws-sdk/lib-storage/node_modules/@aws-sdk/smithy-client": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.188.0.tgz", - "integrity": "sha512-heJ1/++zOTU64CxbIRNm3hQgA2muln/HSUz4fDP8T0O8DwJwi9glvJcuoU0yatdjUELMKXMzgzsZSV/+F5EZ6g==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/middleware-stack": "3.188.0", - "@aws-sdk/types": "3.188.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/@aws-sdk/lib-storage/node_modules/@aws-sdk/types": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.188.0.tgz", - "integrity": "sha512-5z4ewjuRFPXYPCV3gaoHDCdjwrpBUs+12uZFBEbGE0S4UV+YrOPN5ehy+rpAGbhrsKYDxbAg9tHLkX4vRDFVgw==", - "license": "Apache-2.0", - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/@aws-sdk/lib-storage/node_modules/buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", - "license": "MIT", - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, "node_modules/@aws-sdk/middleware-bucket-endpoint": { "version": "3.535.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.535.0.tgz", @@ -1149,113 +1071,6 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-endpoint": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.188.0.tgz", - "integrity": "sha512-+jYv63h7O7g355QZhDLFHUGQvFNuaWvBKwdGNDbToxyMFlN9sKb7Y3SORjh95h5AmY6+SQgqHrg12MBC1YjGbg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/middleware-serde": "3.188.0", - "@aws-sdk/protocol-http": "3.188.0", - "@aws-sdk/signature-v4": "3.188.0", - "@aws-sdk/types": "3.188.0", - "@aws-sdk/url-parser": "3.188.0", - "@aws-sdk/util-config-provider": "3.188.0", - "@aws-sdk/util-middleware": "3.188.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/@aws-sdk/middleware-endpoint/node_modules/@aws-sdk/middleware-serde": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.188.0.tgz", - "integrity": "sha512-+0dw3ZPDEBv/DqSX9MmLQ2lPvxrO761pJXgDssYNVMY7C+PLB5pU6vKwXbmYAXk/FRwYyRjfKOf2WEvRwen0uw==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.188.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/@aws-sdk/middleware-endpoint/node_modules/@aws-sdk/protocol-http": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.188.0.tgz", - "integrity": "sha512-9f5hTzcsQnl64HFUZsD61pT4kmAMgh7nYdPEUQcVmVy0X3rGsbf7CItjxp/tIG/OiJrsM7Rb6hM0gwZO4PHSdQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.188.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/@aws-sdk/middleware-endpoint/node_modules/@aws-sdk/querystring-parser": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.188.0.tgz", - "integrity": "sha512-QT6yLy0hVxOpCBENytwGj2d6V3NkltebCS+6aGPFzeduYuk+YxE1UkK41vhhhsCpJt5srW1zNDbaUzDRLMRGhQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.188.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/@aws-sdk/middleware-endpoint/node_modules/@aws-sdk/signature-v4": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.188.0.tgz", - "integrity": "sha512-YRyXFWfbblcOuMm/gcd1MGRFiwxrzaMfnZs8OAqtxLyA4b+fT59C7z2XTAHbjBcCrYEbDR9kF7yPkjn1uxDO8g==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/is-array-buffer": "3.188.0", - "@aws-sdk/types": "3.188.0", - "@aws-sdk/util-hex-encoding": "3.188.0", - "@aws-sdk/util-middleware": "3.188.0", - "@aws-sdk/util-uri-escape": "3.188.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/@aws-sdk/middleware-endpoint/node_modules/@aws-sdk/types": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.188.0.tgz", - "integrity": "sha512-5z4ewjuRFPXYPCV3gaoHDCdjwrpBUs+12uZFBEbGE0S4UV+YrOPN5ehy+rpAGbhrsKYDxbAg9tHLkX4vRDFVgw==", - "license": "Apache-2.0", - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/@aws-sdk/middleware-endpoint/node_modules/@aws-sdk/url-parser": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.188.0.tgz", - "integrity": "sha512-KdLkmhuFOL7oPhkgVSIMBkaNXxwHqYsHmvZiGOFXT+q28u/Ho85i6ZqgY6FX+/6pfCiF12yDRTBNkqL6SnPwaQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/querystring-parser": "3.188.0", - "@aws-sdk/types": "3.188.0", - "tslib": "^2.3.1" - } - }, - "node_modules/@aws-sdk/middleware-endpoint/node_modules/@aws-sdk/util-middleware": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.188.0.tgz", - "integrity": "sha512-Rm2IFzr+b4M/N6aqYndqyCxnxlwtMMDtGU1uRxaOpVapskKpf8H0aF0U/FCN4t70x5HXql0l2Fv4d3CH9CRGig==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.3.1" - }, - "engines": { - "node": ">= 12.0.0" - } - }, "node_modules/@aws-sdk/middleware-expect-continue": { "version": "3.535.0", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.535.0.tgz", @@ -1621,18 +1436,6 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/util-config-provider": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.188.0.tgz", - "integrity": "sha512-LBA7tLbi7v4uvbOJhSnjJrxbcRifKK/1ZVK94JTV2MNSCCyNkFotyEI5UWDl10YKriTIUyf7o5cakpiDZ3O4xg==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.3.1" - }, - "engines": { - "node": ">= 12.0.0" - } - }, "node_modules/@aws-sdk/util-endpoints": { "version": "3.540.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.540.0.tgz", @@ -1659,18 +1462,6 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/util-hex-encoding": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.188.0.tgz", - "integrity": "sha512-QyWovTtjQ2RYxqVM+STPh65owSqzuXURnfoof778spyX4iQ4z46wOge1YV2ZtwS8w5LWd9eeVvDrLu5POPYOnA==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.3.1" - }, - "engines": { - "node": ">= 12.0.0" - } - }, "node_modules/@aws-sdk/util-locate-window": { "version": "3.535.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.535.0.tgz", @@ -1682,18 +1473,6 @@ "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/util-uri-escape": { - "version": "3.188.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.188.0.tgz", - "integrity": "sha512-4Y6AYZMT483Tiuq8dxz5WHIiPNdSFPGrl6tRTo2Oi2FcwypwmFhqgEGcqxeXDUJktvaCBxeA08DLr/AemVhPCg==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.3.1" - }, - "engines": { - "node": ">= 12.0.0" - } - }, "node_modules/@aws-sdk/util-user-agent-browser": { "version": "3.535.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.535.0.tgz", @@ -2370,7 +2149,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, "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.9" @@ -2383,7 +2162,7 @@ "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, "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", @@ -2957,7 +2736,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -2986,7 +2765,7 @@ "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "devOptional": true }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", @@ -4318,28 +4097,28 @@ "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/@tsconfig/node16": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/@types/babel__core": { @@ -5099,7 +4878,7 @@ "version": "8.11.3", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "dev": true, + "devOptional": true, "bin": { "acorn": "bin/acorn" }, @@ -5129,7 +4908,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, "license": "MIT", "engines": { "node": ">=0.4.0" @@ -5307,7 +5086,7 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/argparse": { @@ -6384,7 +6163,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, "license": "MIT" }, "node_modules/cross-env": { @@ -6569,7 +6348,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, "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" @@ -7116,6 +6895,7 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.8.x" @@ -9541,7 +9321,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, "license": "ISC" }, "node_modules/makeerror": { @@ -9727,21 +9507,13 @@ } }, "node_modules/multer-s3": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/multer-s3/-/multer-s3-3.0.1.tgz", - "integrity": "sha512-BFwSO80a5EW4GJRBdUuSHblz2jhVSAze33ZbnGpcfEicoT0iRolx4kWR+AJV07THFRCQ78g+kelKFdjkCCaXeQ==", - "license": "MIT", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/multer-s3/-/multer-s3-2.10.0.tgz", + "integrity": "sha512-RZsiqG19C9gE82lB7v8duJ+TMIf70fWYHlIwuNcsanOH1ePBoPXZvboEQxEow9jUkk7WQsuyVA2TgriOuDrVrw==", "dependencies": { - "@aws-sdk/lib-storage": "^3.46.0", "file-type": "^3.3.0", "html-comment-regex": "^1.1.2", "run-parallel": "^1.1.6" - }, - "engines": { - "node": ">= 12.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-s3": "^3.0.0" } }, "node_modules/mute-stream": { @@ -10619,6 +10391,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, "license": "MIT", "dependencies": { "inherits": "^2.0.3", @@ -11199,16 +10972,6 @@ "node": ">= 0.8" } }, - "node_modules/stream-browserify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", - "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", - "license": "MIT", - "dependencies": { - "inherits": "~2.0.4", - "readable-stream": "^3.5.0" - } - }, "node_modules/streamsearch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", @@ -11221,6 +10984,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" @@ -11774,7 +11538,7 @@ "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dev": true, + "devOptional": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -12114,7 +11878,7 @@ "version": "5.4.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz", "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==", - "dev": true, + "devOptional": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -12288,7 +12052,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, "license": "MIT" }, "node_modules/v8-to-istanbul": { @@ -12637,7 +12401,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=6" diff --git a/server/package.json b/server/package.json index c4af9da5..ecf5a1b4 100644 --- a/server/package.json +++ b/server/package.json @@ -1,6 +1,6 @@ { "name": "sopt_web_product_server", - "version": "1.1.2", + "version": "1.1.0", "description": "", "author": "", "private": true, @@ -47,7 +47,7 @@ "dayjs": "^1.11.10", "json2csv": "^6.0.0-alpha.2", "multer": "^1.4.5-lts.1", - "multer-s3": "^3.0.1", + "multer-s3": "^2.10.0", "passport": "^0.7.0", "passport-jwt": "^4.0.1", "path": "^0.12.7", From c50f282dbbdd0e92f59fa37965a5deb666fb82a0 Mon Sep 17 00:00:00 2001 From: yeseul106 <68415644+yeseul106@users.noreply.github.com> Date: Thu, 4 Apr 2024 01:41:36 +0900 Subject: [PATCH 2/3] =?UTF-8?q?[FEAT]=20=EB=AA=A8=EC=9E=84=20=EA=B2=8C?= =?UTF-8?q?=EC=8B=9C=EA=B8=80=20=EB=8C=93=EA=B8=80=20=EC=9E=91=EC=84=B1=20?= =?UTF-8?q?API=20=EB=A7=88=EC=9D=B4=EA=B7=B8=EB=A0=88=EC=9D=B4=EC=85=98=20?= =?UTF-8?q?=EB=B0=8F=20=EC=95=8C=EB=A6=BC=20=EC=9E=91=EC=97=85=20(#148)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [FEAT] 모임 게시글 댓글 작성 API 마이그레이션 및 푸시 알림 구현 #118 * [INFRA] 게시글 댓글 작성 API v2 라우팅 규칙 변경 #118 * [INFRA] 댓글 작성 API와 게시글 작성 API 라우팅 규칙 수정 #118 --- docker-compose.yml | 4 +- .../main/comment/v2/CommentV2Controller.java | 42 +++ .../CommentV2CreateCommentBodyDto.java | 22 ++ .../CommentV2CreateCommentResponseDto.java | 14 + .../comment/v2/service/CommentV2Service.java | 10 + .../v2/service/CommentV2ServiceImpl.java | 72 +++++ .../main/common/response/ErrorStatus.java | 3 +- .../crew/main/entity/comment/Comment.java | 254 +++++++++--------- .../entity/comment/CommentRepository.java | 7 + .../makers/crew/main/entity/post/Post.java | 1 + .../crew/main/entity/post/PostRepository.java | 10 + .../notification/PushNotificationEnums.java | 4 +- .../src/comment/v1/comment-v1.controller.ts | 1 + 13 files changed, 312 insertions(+), 132 deletions(-) create mode 100644 main/src/main/java/org/sopt/makers/crew/main/comment/v2/CommentV2Controller.java create mode 100644 main/src/main/java/org/sopt/makers/crew/main/comment/v2/dto/request/CommentV2CreateCommentBodyDto.java create mode 100644 main/src/main/java/org/sopt/makers/crew/main/comment/v2/dto/response/CommentV2CreateCommentResponseDto.java create mode 100644 main/src/main/java/org/sopt/makers/crew/main/comment/v2/service/CommentV2Service.java create mode 100644 main/src/main/java/org/sopt/makers/crew/main/comment/v2/service/CommentV2ServiceImpl.java create mode 100644 main/src/main/java/org/sopt/makers/crew/main/entity/comment/CommentRepository.java diff --git a/docker-compose.yml b/docker-compose.yml index 9925f636..7f723aeb 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -74,8 +74,10 @@ services: caddy.route_3.reverse_proxy: "{{ upstreams 4000 }}" caddy.route_4: /meeting/v2/* caddy.route_4.reverse_proxy: "{{ upstreams 4000 }}" - caddy.route_5: /post/v2/* + caddy.route_5: /post/v2 caddy.route_5.reverse_proxy: "{{ upstreams 4000 }}" + caddy.route_6: /comment/v2 + caddy.route_6.reverse_proxy: "{{ upstreams 4000 }}" nestjs: build: diff --git a/main/src/main/java/org/sopt/makers/crew/main/comment/v2/CommentV2Controller.java b/main/src/main/java/org/sopt/makers/crew/main/comment/v2/CommentV2Controller.java new file mode 100644 index 00000000..e40c5b27 --- /dev/null +++ b/main/src/main/java/org/sopt/makers/crew/main/comment/v2/CommentV2Controller.java @@ -0,0 +1,42 @@ +package org.sopt.makers.crew.main.comment.v2; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; +import java.security.Principal; +import lombok.RequiredArgsConstructor; +import org.sopt.makers.crew.main.comment.v2.dto.request.CommentV2CreateCommentBodyDto; +import org.sopt.makers.crew.main.comment.v2.dto.response.CommentV2CreateCommentResponseDto; +import org.sopt.makers.crew.main.comment.v2.service.CommentV2Service; +import org.sopt.makers.crew.main.common.util.UserUtil; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/comment/v2") +@RequiredArgsConstructor +@Tag(name = "댓글/대댓글") +public class CommentV2Controller { + + private final CommentV2Service commentV2Service; + + @Operation(summary = "모임 게시글 댓글 작성") + @PostMapping() + @ResponseStatus(HttpStatus.CREATED) + @ApiResponses(value = { + @ApiResponse(responseCode = "201", description = "성공"), + }) + public ResponseEntity createComment( + @Valid @RequestBody CommentV2CreateCommentBodyDto requestBody, Principal principal) { + Integer userId = UserUtil.getUserId(principal); + return ResponseEntity.ok(commentV2Service.createComment(requestBody, userId)); + } + +} diff --git a/main/src/main/java/org/sopt/makers/crew/main/comment/v2/dto/request/CommentV2CreateCommentBodyDto.java b/main/src/main/java/org/sopt/makers/crew/main/comment/v2/dto/request/CommentV2CreateCommentBodyDto.java new file mode 100644 index 00000000..c7df385f --- /dev/null +++ b/main/src/main/java/org/sopt/makers/crew/main/comment/v2/dto/request/CommentV2CreateCommentBodyDto.java @@ -0,0 +1,22 @@ +package org.sopt.makers.crew.main.comment.v2.dto.request; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +@Schema(description = "댓글 생성 request body dto") +public class CommentV2CreateCommentBodyDto { + + @Schema(example = "1", required = true, description = "게시글 ID") + @NotNull + private Integer postId; + + @Schema(example = "알고보면 쓸데있는 개발 프로세스", required = true, description = "댓글 내용") + @NotEmpty + private String contents; + +} diff --git a/main/src/main/java/org/sopt/makers/crew/main/comment/v2/dto/response/CommentV2CreateCommentResponseDto.java b/main/src/main/java/org/sopt/makers/crew/main/comment/v2/dto/response/CommentV2CreateCommentResponseDto.java new file mode 100644 index 00000000..d40b12f8 --- /dev/null +++ b/main/src/main/java/org/sopt/makers/crew/main/comment/v2/dto/response/CommentV2CreateCommentResponseDto.java @@ -0,0 +1,14 @@ +package org.sopt.makers.crew.main.comment.v2.dto.response; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor(staticName = "of") +public class CommentV2CreateCommentResponseDto { + + /** + * 생성된 댓글 id + */ + private Integer commentId; +} diff --git a/main/src/main/java/org/sopt/makers/crew/main/comment/v2/service/CommentV2Service.java b/main/src/main/java/org/sopt/makers/crew/main/comment/v2/service/CommentV2Service.java new file mode 100644 index 00000000..c2a7e78a --- /dev/null +++ b/main/src/main/java/org/sopt/makers/crew/main/comment/v2/service/CommentV2Service.java @@ -0,0 +1,10 @@ +package org.sopt.makers.crew.main.comment.v2.service; + +import org.sopt.makers.crew.main.comment.v2.dto.request.CommentV2CreateCommentBodyDto; +import org.sopt.makers.crew.main.comment.v2.dto.response.CommentV2CreateCommentResponseDto; + +public interface CommentV2Service { + + CommentV2CreateCommentResponseDto createComment(CommentV2CreateCommentBodyDto requestBody, + Integer userId); +} diff --git a/main/src/main/java/org/sopt/makers/crew/main/comment/v2/service/CommentV2ServiceImpl.java b/main/src/main/java/org/sopt/makers/crew/main/comment/v2/service/CommentV2ServiceImpl.java new file mode 100644 index 00000000..dbbb5d7a --- /dev/null +++ b/main/src/main/java/org/sopt/makers/crew/main/comment/v2/service/CommentV2ServiceImpl.java @@ -0,0 +1,72 @@ +package org.sopt.makers.crew.main.comment.v2.service; + +import static org.sopt.makers.crew.main.internal.notification.PushNotificationEnums.NEW_COMMENT_PUSH_NOTIFICATION_TITLE; +import static org.sopt.makers.crew.main.internal.notification.PushNotificationEnums.PUSH_NOTIFICATION_CATEGORY; + +import lombok.RequiredArgsConstructor; +import org.sopt.makers.crew.main.comment.v2.dto.request.CommentV2CreateCommentBodyDto; +import org.sopt.makers.crew.main.comment.v2.dto.response.CommentV2CreateCommentResponseDto; +import org.sopt.makers.crew.main.entity.comment.Comment; +import org.sopt.makers.crew.main.entity.comment.CommentRepository; +import org.sopt.makers.crew.main.entity.post.Post; +import org.sopt.makers.crew.main.entity.post.PostRepository; +import org.sopt.makers.crew.main.entity.user.User; +import org.sopt.makers.crew.main.entity.user.UserRepository; +import org.sopt.makers.crew.main.internal.notification.PushNotificationService; +import org.sopt.makers.crew.main.internal.notification.dto.PushNotificationRequestDto; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +@Transactional(readOnly = true) +public class CommentV2ServiceImpl implements CommentV2Service { + + private final PostRepository postRepository; + private final UserRepository userRepository; + private final CommentRepository commentRepository; + private final PushNotificationService pushNotificationService; + + @Value("${push-notification.web-url}") + private String pushWebUrl; + + /** + * 모임 게시글 댓글 작성 + * + * @throws 400 존재하지 않는 게시글일 떄 + * @apiNote 모임에 속한 유저만 작성 가능 + */ + @Override + @Transactional + + public CommentV2CreateCommentResponseDto createComment(CommentV2CreateCommentBodyDto requestBody, + Integer userId) { + Post post = postRepository.findByIdOrThrow(requestBody.getPostId()); + User user = userRepository.findByIdOrThrow(userId); + + Comment comment = Comment.builder() + .contents(requestBody.getContents()) + .user(user) + .post(post) + .build(); + + Comment savedComment = commentRepository.save(comment); + + User PostWriter = post.getUser(); + String[] userIds = {String.valueOf(PostWriter.getOrgId())}; + + String pushNotificationContent = String.format("[%s의 댓글] : \"%s\"", + user.getName(), requestBody.getContents()); + String pushNotificationWeblink = pushWebUrl + "/post?id=" + post.getId(); + + PushNotificationRequestDto pushRequestDto = PushNotificationRequestDto.of(userIds, + NEW_COMMENT_PUSH_NOTIFICATION_TITLE.getValue(), + pushNotificationContent, + PUSH_NOTIFICATION_CATEGORY.getValue(), pushNotificationWeblink); + + pushNotificationService.sendPushNotification(pushRequestDto); + + return CommentV2CreateCommentResponseDto.of(savedComment.getId()); + } +} diff --git a/main/src/main/java/org/sopt/makers/crew/main/common/response/ErrorStatus.java b/main/src/main/java/org/sopt/makers/crew/main/common/response/ErrorStatus.java index b7311d2f..22890132 100644 --- a/main/src/main/java/org/sopt/makers/crew/main/common/response/ErrorStatus.java +++ b/main/src/main/java/org/sopt/makers/crew/main/common/response/ErrorStatus.java @@ -11,13 +11,14 @@ public enum ErrorStatus { * 204 NO_CONTENT */ NO_CONTENT_EXCEPTION("참여한 모임이 없습니다."), - + /** * 400 BAD_REQUEST */ VALIDATION_EXCEPTION("CR-001"), // errorCode는 예시, 추후 변경 예정 -> 잘못된 요청입니다. VALIDATION_REQUEST_MISSING_EXCEPTION("요청값이 입력되지 않았습니다."), NOT_FOUND_MEETING("모임이 없습니다."), + NOT_FOUND_POST("존재하지 않는 게시글입니다."), /** * 401 UNAUTHORIZED diff --git a/main/src/main/java/org/sopt/makers/crew/main/entity/comment/Comment.java b/main/src/main/java/org/sopt/makers/crew/main/entity/comment/Comment.java index 03cc2067..48832145 100644 --- a/main/src/main/java/org/sopt/makers/crew/main/entity/comment/Comment.java +++ b/main/src/main/java/org/sopt/makers/crew/main/entity/comment/Comment.java @@ -34,133 +34,129 @@ @Table(name = "comment") public class Comment { - /** - * 댓글의 고유 식별자 - */ - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private int id; - - /** - * 댓글 내용 - */ - @Column(nullable = false) - private String contents; - - /** - * 댓글 깊이 - */ - @Column(nullable = false, columnDefinition = "int default 0") - private int depth; - - /** - * 댓글 순서 - */ - @Column(nullable = false, columnDefinition = "int default 0") - private int order; - - /** - * 작성일 - */ - @Column(name = "createdDate", nullable = false, columnDefinition = "TIMESTAMP") - @CreatedDate - private LocalDateTime createdDate; - - /** - * 수정일 - */ - @Column(name = "updatedDate", nullable = false, columnDefinition = "TIMESTAMP") - @LastModifiedDate - private LocalDateTime updatedDate; - - /** - * 작성자 정보 - */ - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "userId", nullable = false) - private User user; - - /** - * 작성자의 고유 식별자 - */ - @Column(insertable = false, updatable = false) - private int userId; - - /** - * 댓글이 속한 게시글 정보 - */ - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "postId", nullable = false) - private Post post; - - /** - * 댓글이 속한 게시글의 고유 식별자 - */ - @Column(insertable = false, updatable = false) - private int postId; - - /** - * 댓글에 대한 좋아요 목록 - */ - @OneToMany(mappedBy = "comment", cascade = CascadeType.REMOVE) - private List likes = new ArrayList<>(); - - /** - * 댓글에 대한 좋아요 수 - */ - @Column(nullable = false, columnDefinition = "int default 0") - private int likeCount; - - /** - * 부모 댓글 정보 - */ - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "parentId") - private Comment parent; - - /** - * 부모 댓글의 고유 식별자 - */ - @Column(insertable = false, updatable = false) - private int parentId; - - /** - * 자식 댓글 목록 - */ - @OneToMany(mappedBy = "parent", cascade = CascadeType.REMOVE) - private List children; - - /** - * 댓글에 대한 신고 목록 - */ - @OneToMany(mappedBy = "comment", cascade = CascadeType.REMOVE) - private List reports; - - @Builder - public Comment(String contents, int depth, int order, - User user, int userId, Post post, int postId, int likeCount, Comment parent, - int parentId, List children, List reports) { - this.contents = contents; - this.depth = depth; - this.order = order; - this.user = user; - this.userId = userId; - this.post = post; - this.postId = postId; - this.likeCount = 0; - this.parent = parent; - this.parentId = parentId; - } - - public void addLike(Like like) { - this.likes.add(like); - } - - public void addChildrenComment(Comment comment) { - this.children.add(comment); - } - - public void addReport(Report report) { - this.reports.add(report); - } + /** + * 댓글의 고유 식별자 + */ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private int id; + + /** + * 댓글 내용 + */ + @Column(nullable = false) + private String contents; + + /** + * 댓글 깊이 + */ + @Column(nullable = false, columnDefinition = "int default 0") + private int depth; + + /** + * 댓글 순서 + */ + @Column(nullable = false, columnDefinition = "int default 0") + private int order; + + /** + * 작성일 + */ + @Column(name = "createdDate", nullable = false, columnDefinition = "TIMESTAMP") + @CreatedDate + private LocalDateTime createdDate; + + /** + * 수정일 + */ + @Column(name = "updatedDate", nullable = false, columnDefinition = "TIMESTAMP") + @LastModifiedDate + private LocalDateTime updatedDate; + + /** + * 작성자 정보 + */ + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "userId", nullable = false) + private User user; + + /** + * 작성자의 고유 식별자 + */ + @Column(insertable = false, updatable = false) + private int userId; + + /** + * 댓글이 속한 게시글 정보 + */ + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "postId", nullable = false) + private Post post; + + /** + * 댓글이 속한 게시글의 고유 식별자 + */ + @Column(insertable = false, updatable = false) + private int postId; + + /** + * 댓글에 대한 좋아요 목록 + */ + @OneToMany(mappedBy = "comment", cascade = CascadeType.REMOVE) + private List likes = new ArrayList<>(); + + /** + * 댓글에 대한 좋아요 수 + */ + @Column(nullable = false, columnDefinition = "int default 0") + private int likeCount; + + /** + * 부모 댓글 정보 + */ + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "parentId") + private Comment parent; + + /** + * 부모 댓글의 고유 식별자 + */ + @Column(insertable = false, updatable = false) + private int parentId; + + /** + * 자식 댓글 목록 + */ + @OneToMany(mappedBy = "parent", cascade = CascadeType.REMOVE) + private List children; + + /** + * 댓글에 대한 신고 목록 + */ + @OneToMany(mappedBy = "comment", cascade = CascadeType.REMOVE) + private List reports; + + @Builder + public Comment(String contents, User user, Post post, Comment parent) { + this.contents = contents; + this.user = user; + this.post = post; + this.parent = parent; + this.depth = 0; + this.order = 0; + this.likeCount = 0; + this.post.addComment(this); + } + + public void addLike(Like like) { + this.likes.add(like); + } + + public void addChildrenComment(Comment comment) { + this.children.add(comment); + } + + public void addReport(Report report) { + this.reports.add(report); + } } diff --git a/main/src/main/java/org/sopt/makers/crew/main/entity/comment/CommentRepository.java b/main/src/main/java/org/sopt/makers/crew/main/entity/comment/CommentRepository.java new file mode 100644 index 00000000..45e789e3 --- /dev/null +++ b/main/src/main/java/org/sopt/makers/crew/main/entity/comment/CommentRepository.java @@ -0,0 +1,7 @@ +package org.sopt.makers.crew.main.entity.comment; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface CommentRepository extends JpaRepository { + +} diff --git a/main/src/main/java/org/sopt/makers/crew/main/entity/post/Post.java b/main/src/main/java/org/sopt/makers/crew/main/entity/post/Post.java index 95481e86..ef8bc778 100644 --- a/main/src/main/java/org/sopt/makers/crew/main/entity/post/Post.java +++ b/main/src/main/java/org/sopt/makers/crew/main/entity/post/Post.java @@ -157,6 +157,7 @@ public void addLike(Like like) { public void addComment(Comment comment) { this.comments.add(comment); + this.commentCount++; } public void addReport(Report report) { diff --git a/main/src/main/java/org/sopt/makers/crew/main/entity/post/PostRepository.java b/main/src/main/java/org/sopt/makers/crew/main/entity/post/PostRepository.java index 8358b300..816719c7 100644 --- a/main/src/main/java/org/sopt/makers/crew/main/entity/post/PostRepository.java +++ b/main/src/main/java/org/sopt/makers/crew/main/entity/post/PostRepository.java @@ -1,7 +1,17 @@ package org.sopt.makers.crew.main.entity.post; +import static org.sopt.makers.crew.main.common.response.ErrorStatus.NOT_FOUND_POST; + +import java.util.Optional; +import org.sopt.makers.crew.main.common.exception.BadRequestException; import org.springframework.data.jpa.repository.JpaRepository; public interface PostRepository extends JpaRepository { + Optional findById(Integer postId); + + default Post findByIdOrThrow(Integer postId) { + return findById(postId) + .orElseThrow(() -> new BadRequestException(NOT_FOUND_POST.getErrorCode())); + } } diff --git a/main/src/main/java/org/sopt/makers/crew/main/internal/notification/PushNotificationEnums.java b/main/src/main/java/org/sopt/makers/crew/main/internal/notification/PushNotificationEnums.java index 46c6d533..83096c9c 100644 --- a/main/src/main/java/org/sopt/makers/crew/main/internal/notification/PushNotificationEnums.java +++ b/main/src/main/java/org/sopt/makers/crew/main/internal/notification/PushNotificationEnums.java @@ -11,7 +11,9 @@ public enum PushNotificationEnums { PUSH_NOTIFICATION_CATEGORY("NEWS"), - NEW_POST_PUSH_NOTIFICATION_TITLE("✏️내 모임에 새로운 글이 업로드됐어요."); + NEW_POST_PUSH_NOTIFICATION_TITLE("✏️내 모임에 새로운 글이 업로드됐어요."), + NEW_COMMENT_PUSH_NOTIFICATION_TITLE("📢내가 작성한 모임 피드에 새로운 댓글이 달렸어요."), + ; private final String value; } diff --git a/server/src/comment/v1/comment-v1.controller.ts b/server/src/comment/v1/comment-v1.controller.ts index d0f0b0c5..38a1e3ab 100644 --- a/server/src/comment/v1/comment-v1.controller.ts +++ b/server/src/comment/v1/comment-v1.controller.ts @@ -95,6 +95,7 @@ export class CommentV1Controller { @ApiOperation({ summary: '모임 게시글 댓글 작성', + deprecated: true, }) @ApiOkResponseCommon(CommentV1CreateCommentResponseDto) @ApiResponse({ From 6b077d7ad2f582cc38f1c0da31dad19c51b461f7 Mon Sep 17 00:00:00 2001 From: YeongWoooo Date: Thu, 4 Apr 2024 01:43:27 +0900 Subject: [PATCH 3/3] =?UTF-8?q?[#153]=20feat:=20=EB=AA=A8=EC=9E=84=20?= =?UTF-8?q?=EB=91=98=EB=9F=AC=EB=B3=B4=EA=B8=B0=20API=20=EC=9D=91=EB=8B=B5?= =?UTF-8?q?=EC=97=90=20=EB=AA=A8=EC=9E=84=20=EB=AA=A8=EC=A7=91=EC=8B=9C?= =?UTF-8?q?=EC=9E=91=EC=8B=9C=EA=B0=84=20=EC=B6=94=EA=B0=80=20(#154)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 모임 둘러보기 API 응답에 모집 시작시간(`startDate`) 추가 --- .../response/MeetingV2GetMeetingBannerResponseDto.java | 2 ++ .../main/meeting/v2/service/MeetingV2ServiceImpl.java | 10 +++++----- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/main/src/main/java/org/sopt/makers/crew/main/meeting/v2/dto/response/MeetingV2GetMeetingBannerResponseDto.java b/main/src/main/java/org/sopt/makers/crew/main/meeting/v2/dto/response/MeetingV2GetMeetingBannerResponseDto.java index 14e90f7c..fdca9ba7 100644 --- a/main/src/main/java/org/sopt/makers/crew/main/meeting/v2/dto/response/MeetingV2GetMeetingBannerResponseDto.java +++ b/main/src/main/java/org/sopt/makers/crew/main/meeting/v2/dto/response/MeetingV2GetMeetingBannerResponseDto.java @@ -35,6 +35,8 @@ public class MeetingV2GetMeetingBannerResponseDto { private LocalDateTime mStartDate; /** 모임 활동 종료일 */ private LocalDateTime mEndDate; + /** 모임 모집 시작일 */ + private LocalDateTime startDate; /** 모임 인원 */ private Integer capacity; /** 최근 활동 일자 */ diff --git a/main/src/main/java/org/sopt/makers/crew/main/meeting/v2/service/MeetingV2ServiceImpl.java b/main/src/main/java/org/sopt/makers/crew/main/meeting/v2/service/MeetingV2ServiceImpl.java index 6cd4a0b5..e4b22ae3 100644 --- a/main/src/main/java/org/sopt/makers/crew/main/meeting/v2/service/MeetingV2ServiceImpl.java +++ b/main/src/main/java/org/sopt/makers/crew/main/meeting/v2/service/MeetingV2ServiceImpl.java @@ -49,8 +49,7 @@ public MeetingV2GetAllMeetingByOrgUserDto getAllMeetingByOrgUser( userJoinedList = Stream .concat(existUser.getMeetings().stream(), applyRepository.findAllByUserIdAndStatus(existUser.getId(), EnApplyStatus.APPROVE) - .stream() - .map(apply -> apply.getMeeting())) + .stream().map(apply -> apply.getMeeting())) .map(meeting -> MeetingV2GetAllMeetingByOrgUserMeetingDto.of(meeting.getId(), checkMeetingLeader(meeting, existUser.getId()), meeting.getTitle(), meeting.getImageURL().get(0).getUrl(), meeting.getCategory().getValue(), @@ -89,9 +88,10 @@ public List getMeetingBanner() { return MeetingV2GetMeetingBannerResponseDto.of(meeting.getId(), meeting.getUserId(), meeting.getTitle(), meeting.getCategory(), meeting.getImageURL(), - meeting.getMStartDate(), meeting.getMEndDate(), meeting.getCapacity(), - recentActivityDate, meeting.getTargetActiveGeneration(), meeting.getJoinableParts(), - applicantCount, appliedUserCount, meetingLeader, meeting.getMeetingStatus()); + meeting.getStartDate(), meeting.getMStartDate(), meeting.getMEndDate(), + meeting.getCapacity(), recentActivityDate, meeting.getTargetActiveGeneration(), + meeting.getJoinableParts(), applicantCount, appliedUserCount, meetingLeader, + meeting.getMeetingStatus()); }).toList(); return meetingBanners;