From bae86703a312f3d4ebae2cf23d3f5f6020f86dfb Mon Sep 17 00:00:00 2001 From: JeongHeumChoi <79458446+JeongHeumChoi@users.noreply.github.com> Date: Fri, 2 Aug 2024 02:40:03 +0900 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=80=20=20[Deploy]=20-=20=EA=B0=81?= =?UTF-8?q?=EC=A2=85=20API=20=EC=9D=B4=EC=8A=88=20=ED=95=B4=EA=B2=B0=20?= =?UTF-8?q?=EB=B0=98=EC=98=81=20(#247)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ๐Ÿ› [Fix] - Discord ์†Œ์…œ ๋กœ๊ทธ์ธ ์ „ํ™˜ nickname ์ด์Šˆ ํ•ด๊ฒฐ (#205) * refactor: ์ฝ”๋“œ ์Šคํƒ€์ผ ์ˆ˜์ • * fix: Work ์ƒ์„ฑ ๋‚ ์งœ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์„ค์ • * fix: PeerReview์ผ ๊ฒฝ์šฐ ์ถ”๊ฐ€ * Chore: ํ”„๋กœ์ ํŠธ readme ๊พธ๋ฏธ๊ธฐ * chore: README ์ˆ˜์ • * Fix: ๋กœ๊ทธ์•„์›ƒ ์‹œ, ์ฟ ํ‚ค ์‚ญ์ œ ์ฝ”๋“œ ์ˆ˜์ • * Refactor: ํ•„์š”์—†๋Š” ์ฝ”๋“œ ์‚ญ์ œ * !HOTFIX: ๋ช…๋ น์–ด ์ด๋ฆ„ ์ˆ˜์ •์— ๋”ฐ๋ฅธ listener ์ฝ”๋“œ ์ˆ˜์ • * Chore: DB ์ •๋ณด ์ˆ˜์ • * Fix: JDA ๋กœ๊ทธ ์ •๋ณด ๊ธฐ๋ก ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Feat: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ * Feat: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Fix: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ ์ „ํ™˜ ์ค‘ ์ƒ๊ธด ์ด์Šˆ ํ•ด๊ฒฐ * Fix: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ ์ „ํ™˜ ์ค‘ ์ƒ๊ธด ์ด์Šˆ ํ•ด๊ฒฐ * ๐Ÿ› [Fix] - Discord ์†Œ์…œ ๋กœ๊ทธ์ธ ์ „ํ™˜ (#207) * refactor: ์ฝ”๋“œ ์Šคํƒ€์ผ ์ˆ˜์ • * fix: Work ์ƒ์„ฑ ๋‚ ์งœ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์„ค์ • * fix: PeerReview์ผ ๊ฒฝ์šฐ ์ถ”๊ฐ€ * Chore: ํ”„๋กœ์ ํŠธ readme ๊พธ๋ฏธ๊ธฐ * chore: README ์ˆ˜์ • * Fix: ๋กœ๊ทธ์•„์›ƒ ์‹œ, ์ฟ ํ‚ค ์‚ญ์ œ ์ฝ”๋“œ ์ˆ˜์ • * Refactor: ํ•„์š”์—†๋Š” ์ฝ”๋“œ ์‚ญ์ œ * !HOTFIX: ๋ช…๋ น์–ด ์ด๋ฆ„ ์ˆ˜์ •์— ๋”ฐ๋ฅธ listener ์ฝ”๋“œ ์ˆ˜์ • * Chore: DB ์ •๋ณด ์ˆ˜์ • * Fix: JDA ๋กœ๊ทธ ์ •๋ณด ๊ธฐ๋ก ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Feat: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ * Feat: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Fix: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ ์ „ํ™˜ ์ค‘ ์ƒ๊ธด ์ด์Šˆ ํ•ด๊ฒฐ * Fix: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ ์ „ํ™˜ ์ค‘ ์ƒ๊ธด ์ด์Šˆ ํ•ด๊ฒฐ * Fix: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ ์ „ํ™˜ ์ค‘ ์ƒ๊ธด ์ด์Šˆ ํ•ด๊ฒฐ * ๐Ÿ› [Fix] - Discord ์†Œ์…œ ๋กœ๊ทธ์ธ ์ „ํ™˜ nickname ์ด์Šˆ ํ•ด๊ฒฐ #51 (#209) * refactor: ์ฝ”๋“œ ์Šคํƒ€์ผ ์ˆ˜์ • * fix: Work ์ƒ์„ฑ ๋‚ ์งœ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์„ค์ • * fix: PeerReview์ผ ๊ฒฝ์šฐ ์ถ”๊ฐ€ * Chore: ํ”„๋กœ์ ํŠธ readme ๊พธ๋ฏธ๊ธฐ * chore: README ์ˆ˜์ • * Fix: ๋กœ๊ทธ์•„์›ƒ ์‹œ, ์ฟ ํ‚ค ์‚ญ์ œ ์ฝ”๋“œ ์ˆ˜์ • * Refactor: ํ•„์š”์—†๋Š” ์ฝ”๋“œ ์‚ญ์ œ * !HOTFIX: ๋ช…๋ น์–ด ์ด๋ฆ„ ์ˆ˜์ •์— ๋”ฐ๋ฅธ listener ์ฝ”๋“œ ์ˆ˜์ • * Chore: DB ์ •๋ณด ์ˆ˜์ • * Fix: JDA ๋กœ๊ทธ ์ •๋ณด ๊ธฐ๋ก ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Feat: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ * Feat: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Fix: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ ์ „ํ™˜ ์ค‘ ์ƒ๊ธด ์ด์Šˆ ํ•ด๊ฒฐ * Fix: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ ์ „ํ™˜ ์ค‘ ์ƒ๊ธด ์ด์Šˆ ํ•ด๊ฒฐ * Fix: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ ์ „ํ™˜ ์ค‘ ์ƒ๊ธด ์ด์Šˆ ํ•ด๊ฒฐ * Chore: ํ”„๋ก ํŠธ์—”๋“œ redirect url ์ˆ˜์ • * Fix: ๋””์Šค์ฝ”๋“œ ์†Œ์…œ ๋กœ๊ทธ์ธ ์ด์Šˆ ํ•ด๊ฒฐ * ๐Ÿ› [Fix] - ์†Œ์…œ ๋กœ๊ทธ์ธ ํ›„, ์ถ”๊ฐ€ ์ •๋ณด ์ž…๋ ฅ ๋ฐ›๋Š” ๊ธฐ๋Šฅ ์˜ค๋ฅ˜ (#212) * refactor: ์ฝ”๋“œ ์Šคํƒ€์ผ ์ˆ˜์ • * fix: Work ์ƒ์„ฑ ๋‚ ์งœ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์„ค์ • * fix: PeerReview์ผ ๊ฒฝ์šฐ ์ถ”๊ฐ€ * Chore: ํ”„๋กœ์ ํŠธ readme ๊พธ๋ฏธ๊ธฐ * chore: README ์ˆ˜์ • * Fix: ๋กœ๊ทธ์•„์›ƒ ์‹œ, ์ฟ ํ‚ค ์‚ญ์ œ ์ฝ”๋“œ ์ˆ˜์ • * Refactor: ํ•„์š”์—†๋Š” ์ฝ”๋“œ ์‚ญ์ œ * !HOTFIX: ๋ช…๋ น์–ด ์ด๋ฆ„ ์ˆ˜์ •์— ๋”ฐ๋ฅธ listener ์ฝ”๋“œ ์ˆ˜์ • * Chore: DB ์ •๋ณด ์ˆ˜์ • * Fix: JDA ๋กœ๊ทธ ์ •๋ณด ๊ธฐ๋ก ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Feat: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ * Feat: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Fix: updateUserInfo ์˜ค๋ฅ˜ ํ•ด๊ฒฐ * Fix: ๋””์Šค์ฝ”๋“œ ์ „ํ™˜์œผ๋กœ ์ธํ•œ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ * ๐Ÿ› [Fix] - DiscordListener ์˜ค๋ฅ˜ ํ•ด๊ฒฐ (#214) * refactor: ์ฝ”๋“œ ์Šคํƒ€์ผ ์ˆ˜์ • * fix: Work ์ƒ์„ฑ ๋‚ ์งœ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์„ค์ • * fix: PeerReview์ผ ๊ฒฝ์šฐ ์ถ”๊ฐ€ * Chore: ํ”„๋กœ์ ํŠธ readme ๊พธ๋ฏธ๊ธฐ * chore: README ์ˆ˜์ • * Fix: ๋กœ๊ทธ์•„์›ƒ ์‹œ, ์ฟ ํ‚ค ์‚ญ์ œ ์ฝ”๋“œ ์ˆ˜์ • * Refactor: ํ•„์š”์—†๋Š” ์ฝ”๋“œ ์‚ญ์ œ * !HOTFIX: ๋ช…๋ น์–ด ์ด๋ฆ„ ์ˆ˜์ •์— ๋”ฐ๋ฅธ listener ์ฝ”๋“œ ์ˆ˜์ • * Chore: DB ์ •๋ณด ์ˆ˜์ • * Fix: JDA ๋กœ๊ทธ ์ •๋ณด ๊ธฐ๋ก ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Feat: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ * Feat: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Refactor: ์ฝ”๋“œ ์Šคํƒ€์ผ ์ˆ˜์ • * Refactor: ์ฝ”๋“œ ์Šคํƒ€์ผ ์ˆ˜์ • * Refactor: ์ฝ”๋“œ ์Šคํƒ€์ผ ์ˆ˜์ • * Fix: ๋””์Šค์ฝ”๋“œ ์•„์ด๋”” ์ถ”๊ฐ€ * Fix: ๊ธฐ๋ณธ ํ”„๋กœํ•„ ์‚ฌ์ง„ ์ง€์ • * Fix: serialId => discordId๋กœ ์ „ํ™˜ * Refactor: ์ฝ”๋“œ ์Šคํƒ€์ผ ์ˆ˜์ • * ๐Ÿ› [Fix] - ๋ฐ›์€ ์งˆ๋ฌธ ํŒŒํŠธ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ (#218) * refactor: ์ฝ”๋“œ ์Šคํƒ€์ผ ์ˆ˜์ • * fix: Work ์ƒ์„ฑ ๋‚ ์งœ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์„ค์ • * fix: PeerReview์ผ ๊ฒฝ์šฐ ์ถ”๊ฐ€ * Chore: ํ”„๋กœ์ ํŠธ readme ๊พธ๋ฏธ๊ธฐ * chore: README ์ˆ˜์ • * Fix: ๋กœ๊ทธ์•„์›ƒ ์‹œ, ์ฟ ํ‚ค ์‚ญ์ œ ์ฝ”๋“œ ์ˆ˜์ • * Refactor: ํ•„์š”์—†๋Š” ์ฝ”๋“œ ์‚ญ์ œ * !HOTFIX: ๋ช…๋ น์–ด ์ด๋ฆ„ ์ˆ˜์ •์— ๋”ฐ๋ฅธ listener ์ฝ”๋“œ ์ˆ˜์ • * Chore: DB ์ •๋ณด ์ˆ˜์ • * Fix: JDA ๋กœ๊ทธ ์ •๋ณด ๊ธฐ๋ก ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Feat: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ * Feat: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Fix: ๋กœ๊ทธ์ธ ์‚ฌ์šฉ์ž๊ฐ€ ํƒ€๊ฒŸ ๋ฉค๋ฒ„์™€ ์—ฐ๊ด€์ด ์—†์„ ๊ฒฝ์šฐ ์˜ˆ์™ธ์ฒ˜๋ฆฌ * ๐Ÿ› [Fix] - ๋ฉค๋ฒ„ ์ •๋ณด API ์˜ˆ์™ธ์ฒ˜๋ฆฌ (#220) * refactor: ์ฝ”๋“œ ์Šคํƒ€์ผ ์ˆ˜์ • * fix: Work ์ƒ์„ฑ ๋‚ ์งœ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์„ค์ • * fix: PeerReview์ผ ๊ฒฝ์šฐ ์ถ”๊ฐ€ * Chore: ํ”„๋กœ์ ํŠธ readme ๊พธ๋ฏธ๊ธฐ * chore: README ์ˆ˜์ • * Fix: ๋กœ๊ทธ์•„์›ƒ ์‹œ, ์ฟ ํ‚ค ์‚ญ์ œ ์ฝ”๋“œ ์ˆ˜์ • * Refactor: ํ•„์š”์—†๋Š” ์ฝ”๋“œ ์‚ญ์ œ * !HOTFIX: ๋ช…๋ น์–ด ์ด๋ฆ„ ์ˆ˜์ •์— ๋”ฐ๋ฅธ listener ์ฝ”๋“œ ์ˆ˜์ • * Chore: DB ์ •๋ณด ์ˆ˜์ • * Fix: JDA ๋กœ๊ทธ ์ •๋ณด ๊ธฐ๋ก ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Feat: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ * Feat: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Fix: ๋กœ๊ทธ์ธ ์‚ฌ์šฉ์ž๊ฐ€ ํƒ€๊ฒŸ ๋ฉค๋ฒ„์™€ ์—ฐ๊ด€์ด ์—†์„ ๊ฒฝ์šฐ ์˜ˆ์™ธ์ฒ˜๋ฆฌ * ๐Ÿ› [Fix] - ํŒ€ ๋ฉค๋ฒ„ ๋ชฉ๋ก ์กฐํšŒ ์˜ˆ์™ธ์ฒ˜๋ฆฌ (#223) * refactor: ์ฝ”๋“œ ์Šคํƒ€์ผ ์ˆ˜์ • * fix: Work ์ƒ์„ฑ ๋‚ ์งœ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์„ค์ • * fix: PeerReview์ผ ๊ฒฝ์šฐ ์ถ”๊ฐ€ * Chore: ํ”„๋กœ์ ํŠธ readme ๊พธ๋ฏธ๊ธฐ * chore: README ์ˆ˜์ • * Fix: ๋กœ๊ทธ์•„์›ƒ ์‹œ, ์ฟ ํ‚ค ์‚ญ์ œ ์ฝ”๋“œ ์ˆ˜์ • * Refactor: ํ•„์š”์—†๋Š” ์ฝ”๋“œ ์‚ญ์ œ * !HOTFIX: ๋ช…๋ น์–ด ์ด๋ฆ„ ์ˆ˜์ •์— ๋”ฐ๋ฅธ listener ์ฝ”๋“œ ์ˆ˜์ • * Chore: DB ์ •๋ณด ์ˆ˜์ • * Fix: JDA ๋กœ๊ทธ ์ •๋ณด ๊ธฐ๋ก ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Feat: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ * Feat: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Fix: ๋กœ๊ทธ์ธ ์‚ฌ์šฉ์ž๊ฐ€ ํ•ด๋‹น ํŒ€์›์ด ์•„๋‹ ๊ฒฝ์šฐ ์˜ˆ์™ธ์ฒ˜๋ฆฌ * ๐Ÿ› [Fix] - ๋ฐ›์€ ์งˆ๋ฌธ ๋ชฉ๋ก ํŒŒํŠธ ์ด์Šˆ (#226) * refactor: ์ฝ”๋“œ ์Šคํƒ€์ผ ์ˆ˜์ • * fix: Work ์ƒ์„ฑ ๋‚ ์งœ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์„ค์ • * fix: PeerReview์ผ ๊ฒฝ์šฐ ์ถ”๊ฐ€ * Chore: ํ”„๋กœ์ ํŠธ readme ๊พธ๋ฏธ๊ธฐ * chore: README ์ˆ˜์ • * Fix: ๋กœ๊ทธ์•„์›ƒ ์‹œ, ์ฟ ํ‚ค ์‚ญ์ œ ์ฝ”๋“œ ์ˆ˜์ • * Refactor: ํ•„์š”์—†๋Š” ์ฝ”๋“œ ์‚ญ์ œ * !HOTFIX: ๋ช…๋ น์–ด ์ด๋ฆ„ ์ˆ˜์ •์— ๋”ฐ๋ฅธ listener ์ฝ”๋“œ ์ˆ˜์ • * Chore: DB ์ •๋ณด ์ˆ˜์ • * Fix: JDA ๋กœ๊ทธ ์ •๋ณด ๊ธฐ๋ก ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Feat: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ * Feat: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Fix: ์งˆ๋ฌธ์„ ๋‚˜์—๊ฒŒ ๋ณด๋‚ธ ์ƒ๋Œ€๋ฐฉ์˜ ํŒŒํŠธ๊ฐ€ ๋‹ค๋ฅด๊ฒŒ ๋œจ๋Š” ์ด์Šˆ ํ•ด๊ฒฐ * ๐Ÿ› [Fix] - ๋ฐ›์€ ์งˆ๋ฌธ ๋ชฉ๋ก ํŒŒํŠธ ์ด์Šˆ (#229) * refactor: ์ฝ”๋“œ ์Šคํƒ€์ผ ์ˆ˜์ • * fix: Work ์ƒ์„ฑ ๋‚ ์งœ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์„ค์ • * fix: PeerReview์ผ ๊ฒฝ์šฐ ์ถ”๊ฐ€ * Chore: ํ”„๋กœ์ ํŠธ readme ๊พธ๋ฏธ๊ธฐ * chore: README ์ˆ˜์ • * Fix: ๋กœ๊ทธ์•„์›ƒ ์‹œ, ์ฟ ํ‚ค ์‚ญ์ œ ์ฝ”๋“œ ์ˆ˜์ • * Refactor: ํ•„์š”์—†๋Š” ์ฝ”๋“œ ์‚ญ์ œ * !HOTFIX: ๋ช…๋ น์–ด ์ด๋ฆ„ ์ˆ˜์ •์— ๋”ฐ๋ฅธ listener ์ฝ”๋“œ ์ˆ˜์ • * Chore: DB ์ •๋ณด ์ˆ˜์ • * Fix: JDA ๋กœ๊ทธ ์ •๋ณด ๊ธฐ๋ก ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Feat: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ * Feat: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Fix: work ๊ธฐ์ค€์ด ์•„๋‹Œ, ๋‚ ์งœ์— work๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋กœ API ์ˆ˜์ • * ๐Ÿ’… [Refactor] - ๋””์Šค์ฝ”๋“œ ๋ด‡ ๋‹ต๋ณ€ ๋ฌธ๊ตฌ ์˜คํƒ€ ์ˆ˜์ • (#232) * refactor: ์ฝ”๋“œ ์Šคํƒ€์ผ ์ˆ˜์ • * fix: Work ์ƒ์„ฑ ๋‚ ์งœ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์„ค์ • * fix: PeerReview์ผ ๊ฒฝ์šฐ ์ถ”๊ฐ€ * Chore: ํ”„๋กœ์ ํŠธ readme ๊พธ๋ฏธ๊ธฐ * chore: README ์ˆ˜์ • * Fix: ๋กœ๊ทธ์•„์›ƒ ์‹œ, ์ฟ ํ‚ค ์‚ญ์ œ ์ฝ”๋“œ ์ˆ˜์ • * Refactor: ํ•„์š”์—†๋Š” ์ฝ”๋“œ ์‚ญ์ œ * !HOTFIX: ๋ช…๋ น์–ด ์ด๋ฆ„ ์ˆ˜์ •์— ๋”ฐ๋ฅธ listener ์ฝ”๋“œ ์ˆ˜์ • * Chore: DB ์ •๋ณด ์ˆ˜์ • * Fix: JDA ๋กœ๊ทธ ์ •๋ณด ๊ธฐ๋ก ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Feat: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ * Feat: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Refactor: ์˜คํƒ€ ์ˆ˜์ • * โœจ [Feature] - ํŒ€์› ๋žญํ‚น API ๊ธฐํš ์ˆ˜์ •์— ๋”ฐ๋ฅธ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ (#234) * refactor: ์ฝ”๋“œ ์Šคํƒ€์ผ ์ˆ˜์ • * fix: Work ์ƒ์„ฑ ๋‚ ์งœ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์„ค์ • * fix: PeerReview์ผ ๊ฒฝ์šฐ ์ถ”๊ฐ€ * Chore: ํ”„๋กœ์ ํŠธ readme ๊พธ๋ฏธ๊ธฐ * chore: README ์ˆ˜์ • * Fix: ๋กœ๊ทธ์•„์›ƒ ์‹œ, ์ฟ ํ‚ค ์‚ญ์ œ ์ฝ”๋“œ ์ˆ˜์ • * Refactor: ํ•„์š”์—†๋Š” ์ฝ”๋“œ ์‚ญ์ œ * !HOTFIX: ๋ช…๋ น์–ด ์ด๋ฆ„ ์ˆ˜์ •์— ๋”ฐ๋ฅธ listener ์ฝ”๋“œ ์ˆ˜์ • * Chore: DB ์ •๋ณด ์ˆ˜์ • * Fix: JDA ๋กœ๊ทธ ์ •๋ณด ๊ธฐ๋ก ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Feat: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ * Feat: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Refactor: ์ฝ”๋“œ ์Šคํƒ€์ผ ์ˆ˜์ • * Delete: ํ•„์š”์—†๋Š” ํŒŒ์ผ ์‚ญ์ œ * Feat: ํŒ€ ์ž‘์—… ์ƒํƒœ API ๊ตฌํ˜„ * Feat: ํŒ€ ์ž‘์—… ์ƒํƒœ API ๊ตฌํ˜„ * Feat: ํŒ€ ์ž‘์—… ์ƒํƒœ API ๊ตฌํ˜„ * Feat: ํŒ€ ์ž‘์—… ์ƒํƒœ API ๊ตฌํ˜„ * Feat: ํŒ€์› ๋žญํ‚น API ๊ตฌํ˜„ * โœ๏ธ [Chore] - GPT API ํ† ํฐ ์ˆ˜์ • (#237) * refactor: ์ฝ”๋“œ ์Šคํƒ€์ผ ์ˆ˜์ • * fix: Work ์ƒ์„ฑ ๋‚ ์งœ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์„ค์ • * fix: PeerReview์ผ ๊ฒฝ์šฐ ์ถ”๊ฐ€ * Chore: ํ”„๋กœ์ ํŠธ readme ๊พธ๋ฏธ๊ธฐ * chore: README ์ˆ˜์ • * Fix: ๋กœ๊ทธ์•„์›ƒ ์‹œ, ์ฟ ํ‚ค ์‚ญ์ œ ์ฝ”๋“œ ์ˆ˜์ • * Refactor: ํ•„์š”์—†๋Š” ์ฝ”๋“œ ์‚ญ์ œ * !HOTFIX: ๋ช…๋ น์–ด ์ด๋ฆ„ ์ˆ˜์ •์— ๋”ฐ๋ฅธ listener ์ฝ”๋“œ ์ˆ˜์ • * Chore: DB ์ •๋ณด ์ˆ˜์ • * Fix: JDA ๋กœ๊ทธ ์ •๋ณด ๊ธฐ๋ก ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Feat: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ * Feat: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: GPT ํ† ํฐ ์ˆ˜์ • * Chore: GPT ํ† ํฐ ์ˆ˜์ • * Chore: GPT ํ† ํฐ ์ˆ˜์ • * Chore: merge * โœ๏ธ [Chore] - GPT API ํ† ํฐ ์ˆ˜์ • (#239) * refactor: ์ฝ”๋“œ ์Šคํƒ€์ผ ์ˆ˜์ • * fix: Work ์ƒ์„ฑ ๋‚ ์งœ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์„ค์ • * fix: PeerReview์ผ ๊ฒฝ์šฐ ์ถ”๊ฐ€ * Chore: ํ”„๋กœ์ ํŠธ readme ๊พธ๋ฏธ๊ธฐ * chore: README ์ˆ˜์ • * Fix: ๋กœ๊ทธ์•„์›ƒ ์‹œ, ์ฟ ํ‚ค ์‚ญ์ œ ์ฝ”๋“œ ์ˆ˜์ • * Refactor: ํ•„์š”์—†๋Š” ์ฝ”๋“œ ์‚ญ์ œ * !HOTFIX: ๋ช…๋ น์–ด ์ด๋ฆ„ ์ˆ˜์ •์— ๋”ฐ๋ฅธ listener ์ฝ”๋“œ ์ˆ˜์ • * Chore: DB ์ •๋ณด ์ˆ˜์ • * Fix: JDA ๋กœ๊ทธ ์ •๋ณด ๊ธฐ๋ก ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Feat: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ * Feat: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: GPT ํ† ํฐ ์ˆ˜์ • * Chore: GPT ํ† ํฐ ์ˆ˜์ • * Chore: yml ์ˆ˜์ • * Chore: yml ์ˆ˜์ • * Chore: yml ์ˆ˜์ • * Chore: yml ์ˆ˜์ • * โœจ [Feature] - ํŒ€ ์กฐํšŒ API์— memeberId ์ถ”๊ฐ€ (#244) * refactor: ์ฝ”๋“œ ์Šคํƒ€์ผ ์ˆ˜์ • * fix: Work ์ƒ์„ฑ ๋‚ ์งœ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์„ค์ • * fix: PeerReview์ผ ๊ฒฝ์šฐ ์ถ”๊ฐ€ * Chore: ํ”„๋กœ์ ํŠธ readme ๊พธ๋ฏธ๊ธฐ * chore: README ์ˆ˜์ • * Fix: ๋กœ๊ทธ์•„์›ƒ ์‹œ, ์ฟ ํ‚ค ์‚ญ์ œ ์ฝ”๋“œ ์ˆ˜์ • * Refactor: ํ•„์š”์—†๋Š” ์ฝ”๋“œ ์‚ญ์ œ * !HOTFIX: ๋ช…๋ น์–ด ์ด๋ฆ„ ์ˆ˜์ •์— ๋”ฐ๋ฅธ listener ์ฝ”๋“œ ์ˆ˜์ • * Chore: DB ์ •๋ณด ์ˆ˜์ • * Fix: JDA ๋กœ๊ทธ ์ •๋ณด ๊ธฐ๋ก ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Feat: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ * Feat: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Feat: ํŒ€ ๋ชฉ๋ก ์กฐํšŒ API์— memberId ์ถ”๊ฐ€ * ๐Ÿ› [Fix] - ๊ฐ์ข… API ์ด์Šˆ ํ•ด๊ฒฐ (#246) * refactor: ์ฝ”๋“œ ์Šคํƒ€์ผ ์ˆ˜์ • * fix: Work ์ƒ์„ฑ ๋‚ ์งœ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์„ค์ • * fix: PeerReview์ผ ๊ฒฝ์šฐ ์ถ”๊ฐ€ * Chore: ํ”„๋กœ์ ํŠธ readme ๊พธ๋ฏธ๊ธฐ * chore: README ์ˆ˜์ • * Fix: ๋กœ๊ทธ์•„์›ƒ ์‹œ, ์ฟ ํ‚ค ์‚ญ์ œ ์ฝ”๋“œ ์ˆ˜์ • * Refactor: ํ•„์š”์—†๋Š” ์ฝ”๋“œ ์‚ญ์ œ * !HOTFIX: ๋ช…๋ น์–ด ์ด๋ฆ„ ์ˆ˜์ •์— ๋”ฐ๋ฅธ listener ์ฝ”๋“œ ์ˆ˜์ • * Chore: DB ์ •๋ณด ์ˆ˜์ • * Fix: JDA ๋กœ๊ทธ ์ •๋ณด ๊ธฐ๋ก ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Feat: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ * Feat: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Chore: Discord ์†Œ์…œ ๋กœ๊ทธ์ธ Credentials ์ถ”๊ฐ€ * Fix: ๋™๋ฃŒํ‰๊ฐ€ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ์ˆ˜์ • * Fix: memberId ์ถ”๊ฐ€ * Fix: ์Šคํฌ๋Ÿผ API ์˜ˆ์™ธ์ฒ˜๋ฆฌ ๋ฐ˜์˜ * Feat: ์—…๋ฌด ์ƒ์„ฑ API ๊ตฌํ˜„ * Feat: ํ”„๋กœ์ ํŠธ ๊ณต๊ฐœ ์—ฌ๋ถ€ ์ถ”๊ฐ€ * Feat: ํ”„๋กœ์ ํŠธ ๊ณต๊ฐœ ์—ฌ๋ถ€ ์ถ”๊ฐ€ * Fix: ์—…๋ฌด ์ „์ฒด ์‹œ๊ฐ„ ์ถ”๊ฐ€ * Fix: Member ํŒŒํŠธ ์ถ”๊ฐ€ * Feat: ํ”„๋กœ์ ํŠธ ๊ณต๊ฐœ ์—ฌ๋ถ€ ์ถ”๊ฐ€ --- .../controller/ScrumController.java | 8 +- .../controller/WorkController.java | 9 ++ .../team28/startup_valley/domain/Work.java | 5 ++ .../dto/request/WorkCreateDto.java | 9 ++ .../dto/response/MemberContributionDto.java | 4 + .../startup_valley/dto/response/ScrumDto.java | 4 + .../startup_valley/dto/response/TeamDto.java | 4 + .../dto/response/TeamRetrieveDto.java | 12 ++- .../dto/response/TeamWorkStatusDto.java | 4 +- .../dto/response/UserWorkDto.java | 32 +++++++ .../startup_valley/exception/ErrorCode.java | 1 + .../repository/ReviewRepository.java | 2 +- .../repository/WorkRepository.java | 1 + .../startup_valley/service/MemberService.java | 1 + .../startup_valley/service/ReviewService.java | 2 +- .../startup_valley/service/ScrumService.java | 83 ++++++++++--------- .../startup_valley/service/TeamService.java | 14 +++- .../startup_valley/service/WorkService.java | 66 +++++++++++++-- 18 files changed, 202 insertions(+), 59 deletions(-) create mode 100644 src/main/java/goormthon/team28/startup_valley/dto/request/WorkCreateDto.java create mode 100644 src/main/java/goormthon/team28/startup_valley/dto/response/UserWorkDto.java diff --git a/src/main/java/goormthon/team28/startup_valley/controller/ScrumController.java b/src/main/java/goormthon/team28/startup_valley/controller/ScrumController.java index fb06637..575b7cf 100644 --- a/src/main/java/goormthon/team28/startup_valley/controller/ScrumController.java +++ b/src/main/java/goormthon/team28/startup_valley/controller/ScrumController.java @@ -13,12 +13,12 @@ public class ScrumController { private final ScrumService scrumService; - @GetMapping("/teams/{teamsId}/scrums") + @GetMapping("/members/{membersId}/teams/{teamsId}/scrums") public ResponseDto listScrum( @UserId Long userId, - @PathVariable Long teamsId, - @RequestParam(required = false) Long target + @PathVariable Long membersId, + @PathVariable Long teamsId ) { - return ResponseDto.ok(scrumService.listScrum(userId, teamsId, target)); + return ResponseDto.ok(scrumService.listScrum(userId, membersId, teamsId)); } } diff --git a/src/main/java/goormthon/team28/startup_valley/controller/WorkController.java b/src/main/java/goormthon/team28/startup_valley/controller/WorkController.java index 64150e9..94e2b36 100644 --- a/src/main/java/goormthon/team28/startup_valley/controller/WorkController.java +++ b/src/main/java/goormthon/team28/startup_valley/controller/WorkController.java @@ -2,6 +2,7 @@ import goormthon.team28.startup_valley.annotation.UserId; import goormthon.team28.startup_valley.dto.global.ResponseDto; +import goormthon.team28.startup_valley.dto.request.WorkCreateDto; import goormthon.team28.startup_valley.dto.request.WorkTimeDto; import goormthon.team28.startup_valley.service.WorkService; import lombok.RequiredArgsConstructor; @@ -48,6 +49,14 @@ public ResponseDto patchManageWork( return ResponseDto.ok(workService.patchManageWork(userId, membersId, worksId, workTimeDto)); } + @PostMapping("/members/{membersId}/works") + public ResponseDto createWork( + @UserId Long userId, + @PathVariable Long membersId, + @RequestBody WorkCreateDto workCreateDto) { + return ResponseDto.created(workService.createWork(userId, membersId, workCreateDto)); + } + @GetMapping("/members/{membersId}/works/measure-one") public ResponseDto measureTeamMemberWork(@UserId Long userId, @PathVariable Long membersId) { return ResponseDto.ok(workService.measureTeamMemberWork(userId, membersId)); diff --git a/src/main/java/goormthon/team28/startup_valley/domain/Work.java b/src/main/java/goormthon/team28/startup_valley/domain/Work.java index 0307e39..dcf587c 100644 --- a/src/main/java/goormthon/team28/startup_valley/domain/Work.java +++ b/src/main/java/goormthon/team28/startup_valley/domain/Work.java @@ -43,4 +43,9 @@ public void updateTime(LocalDateTime startAt, LocalDateTime endAt) { this.startAt = startAt; this.endAt = endAt; } + + public void updateContent(String content) { + this.content = content; + this.endAt = LocalDateTime.now(); + } } diff --git a/src/main/java/goormthon/team28/startup_valley/dto/request/WorkCreateDto.java b/src/main/java/goormthon/team28/startup_valley/dto/request/WorkCreateDto.java new file mode 100644 index 0000000..4f59081 --- /dev/null +++ b/src/main/java/goormthon/team28/startup_valley/dto/request/WorkCreateDto.java @@ -0,0 +1,9 @@ +package goormthon.team28.startup_valley.dto.request; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public record WorkCreateDto( + @JsonProperty("content") + String content +) { +} diff --git a/src/main/java/goormthon/team28/startup_valley/dto/response/MemberContributionDto.java b/src/main/java/goormthon/team28/startup_valley/dto/response/MemberContributionDto.java index 3eb285f..f5e17c9 100644 --- a/src/main/java/goormthon/team28/startup_valley/dto/response/MemberContributionDto.java +++ b/src/main/java/goormthon/team28/startup_valley/dto/response/MemberContributionDto.java @@ -15,6 +15,8 @@ public record MemberContributionDto( String part, @JsonProperty("peerReviewSummary") String peerReviewSummary, + @JsonProperty("isPublic") + boolean isPublic, @JsonProperty("scrumList") List scrumContributionDtoList ) implements Serializable { @@ -22,12 +24,14 @@ public static MemberContributionDto of( final Long totalMinute, final EPart ePart, final String peerReviewSummary, + final boolean isPublic, final List scrumContributionDtoList ) { return MemberContributionDto.builder() .totalMinute(totalMinute) .part(ePart.getName()) .peerReviewSummary(peerReviewSummary) + .isPublic(isPublic) .scrumContributionDtoList(scrumContributionDtoList) .build(); } diff --git a/src/main/java/goormthon/team28/startup_valley/dto/response/ScrumDto.java b/src/main/java/goormthon/team28/startup_valley/dto/response/ScrumDto.java index de39fdb..5cc1496 100644 --- a/src/main/java/goormthon/team28/startup_valley/dto/response/ScrumDto.java +++ b/src/main/java/goormthon/team28/startup_valley/dto/response/ScrumDto.java @@ -17,6 +17,8 @@ public record ScrumDto( String startAt, @JsonProperty("endAt") String endAt, + @JsonProperty("totalTime") + Long totalTime, @JsonProperty("workList") List workForScrumDtoList ) implements Serializable { @@ -25,6 +27,7 @@ public static ScrumDto of( final String content, final LocalDate startAt, final LocalDate endAt, + final Long totalTime, final List workForScrumDtoList ) { return ScrumDto.builder() @@ -32,6 +35,7 @@ public static ScrumDto of( .content(content) .startAt(startAt.toString()) .endAt(endAt.toString()) + .totalTime(totalTime) .workForScrumDtoList(workForScrumDtoList) .build(); } diff --git a/src/main/java/goormthon/team28/startup_valley/dto/response/TeamDto.java b/src/main/java/goormthon/team28/startup_valley/dto/response/TeamDto.java index fbc0d07..5a82923 100644 --- a/src/main/java/goormthon/team28/startup_valley/dto/response/TeamDto.java +++ b/src/main/java/goormthon/team28/startup_valley/dto/response/TeamDto.java @@ -9,6 +9,8 @@ public record TeamDto( @JsonProperty("id") Long id, + @JsonProperty("memberId") + Long memberId, @JsonProperty("name") String name, @JsonProperty("image") @@ -16,11 +18,13 @@ public record TeamDto( ) implements Serializable { public static TeamDto of( final Long id, + final Long memberId, final String name, final String image ) { return TeamDto.builder() .id(id) + .memberId(memberId) .name(name) .image(image) .build(); diff --git a/src/main/java/goormthon/team28/startup_valley/dto/response/TeamRetrieveDto.java b/src/main/java/goormthon/team28/startup_valley/dto/response/TeamRetrieveDto.java index 133bee8..804b8a9 100644 --- a/src/main/java/goormthon/team28/startup_valley/dto/response/TeamRetrieveDto.java +++ b/src/main/java/goormthon/team28/startup_valley/dto/response/TeamRetrieveDto.java @@ -12,6 +12,8 @@ public record TeamRetrieveDto( @JsonProperty("id") Long id, + @JsonProperty("memberId") + Long memberId, @JsonProperty("name") String name, @JsonProperty("summary") @@ -23,26 +25,32 @@ public record TeamRetrieveDto( @JsonProperty("endAt") String endAt, @JsonProperty("status") - String status + String status, + @JsonProperty("isPublic") + boolean isPublic ) implements Serializable { public static TeamRetrieveDto of( final Long id, + final Long memberId, final String name, final String retrospection, final String profileImage, final LocalDate startAt, @Nullable final LocalDate endAt, - final EProjectStatus eProjectStatus + final EProjectStatus eProjectStatus, + final boolean isPublic ) { return TeamRetrieveDto.builder() .id(id) + .memberId(memberId) .name(name) .retrospection(retrospection) .profileImage(profileImage) .startAt(startAt.toString()) .endAt(endAt != null ? endAt.toString() : null) .status(eProjectStatus.getStatus()) + .isPublic(isPublic) .build(); } } diff --git a/src/main/java/goormthon/team28/startup_valley/dto/response/TeamWorkStatusDto.java b/src/main/java/goormthon/team28/startup_valley/dto/response/TeamWorkStatusDto.java index 8b0008b..c810a5b 100644 --- a/src/main/java/goormthon/team28/startup_valley/dto/response/TeamWorkStatusDto.java +++ b/src/main/java/goormthon/team28/startup_valley/dto/response/TeamWorkStatusDto.java @@ -14,7 +14,7 @@ public record TeamWorkStatusDto ( @JsonProperty("endDate") String endDate, @JsonProperty("currentWorkerList") - List currentWorkerList, + List currentWorkerList, @Nullable @JsonProperty("latestWork") String latestWork, @@ -24,7 +24,7 @@ public record TeamWorkStatusDto ( public static TeamWorkStatusDto of( final String startDate, final String endDate, - final List currentWorkerList, + final List currentWorkerList, final String latestWork, final String projectName ) { diff --git a/src/main/java/goormthon/team28/startup_valley/dto/response/UserWorkDto.java b/src/main/java/goormthon/team28/startup_valley/dto/response/UserWorkDto.java new file mode 100644 index 0000000..a0c4d40 --- /dev/null +++ b/src/main/java/goormthon/team28/startup_valley/dto/response/UserWorkDto.java @@ -0,0 +1,32 @@ +package goormthon.team28.startup_valley.dto.response; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Builder; + +import java.io.Serializable; + +@Builder +public record UserWorkDto( + @JsonProperty("id") + Long id, + @JsonProperty("nickname") + String nickname, + @JsonProperty("profileImage") + String profileImage, + @JsonProperty("part") + String part +) implements Serializable { + public static UserWorkDto of( + final Long id, + final String nickname, + final String profileImage, + final String part + ) { + return UserWorkDto.builder() + .id(id) + .nickname(nickname) + .profileImage(profileImage) + .part(part) + .build(); + } +} diff --git a/src/main/java/goormthon/team28/startup_valley/exception/ErrorCode.java b/src/main/java/goormthon/team28/startup_valley/exception/ErrorCode.java index a217efc..5212f4d 100644 --- a/src/main/java/goormthon/team28/startup_valley/exception/ErrorCode.java +++ b/src/main/java/goormthon/team28/startup_valley/exception/ErrorCode.java @@ -24,6 +24,7 @@ public enum ErrorCode { INVALID_QUERY_PARAMETER(40012, HttpStatus.BAD_REQUEST, "์œ ํšจํ•˜์ง€ ์•Š๋Š” ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ์ž…๋‹ˆ๋‹ค."), MISMATCH_TEAM_AND_MEMBER(40013, HttpStatus.BAD_REQUEST, "ํŒ€๊ณผ ๋ฉค๋ฒ„๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค."), INVALID_LOGIN_USER_AND_TARGET_MEMBER(40014, HttpStatus.BAD_REQUEST, "๋กœ๊ทธ์ธ ์‚ฌ์šฉ์ž๋Š” ํƒ€๊ฒŸ ์‚ฌ์šฉ์ž์™€ ๊ฐ™์€ ํŒ€์ด ์•„๋‹™๋‹ˆ๋‹ค."), + NOT_ASSOCIATE_LOGIN_USER_AND_TARGET_MEMBER(40015, HttpStatus.BAD_REQUEST, "๋กœ๊ทธ์ธ ์‚ฌ์šฉ์ž๋Š” ํƒ€๊ฒŸ ์‚ฌ์šฉ์ž์™€ ์—ฐ๊ด€ ๊ด€๊ณ„๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค."), //401 INVALID_HEADER_VALUE(40100, HttpStatus.UNAUTHORIZED, "์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ํ—ค๋”๊ฐ’์ž…๋‹ˆ๋‹ค."), diff --git a/src/main/java/goormthon/team28/startup_valley/repository/ReviewRepository.java b/src/main/java/goormthon/team28/startup_valley/repository/ReviewRepository.java index eee43d4..f28dfcb 100644 --- a/src/main/java/goormthon/team28/startup_valley/repository/ReviewRepository.java +++ b/src/main/java/goormthon/team28/startup_valley/repository/ReviewRepository.java @@ -12,6 +12,6 @@ public interface ReviewRepository extends JpaRepository { Optional findBySenderAndReceiver(Member sender, Member receiver); List findAllByReceiver(Member receiver); - Boolean existsBySender(Member sender); +// Boolean existsBySenderAndReceiver(Member sender); Boolean existsBySenderAndReceiver(Member sender, Member receiver); } diff --git a/src/main/java/goormthon/team28/startup_valley/repository/WorkRepository.java b/src/main/java/goormthon/team28/startup_valley/repository/WorkRepository.java index e3ee459..f4f1b15 100644 --- a/src/main/java/goormthon/team28/startup_valley/repository/WorkRepository.java +++ b/src/main/java/goormthon/team28/startup_valley/repository/WorkRepository.java @@ -16,6 +16,7 @@ public interface WorkRepository extends JpaRepository { Optional findByScrumAndOwnerAndEndAtIsNull(Scrum scrum,Member owner); Optional findByIdAndOwner(Long workId, Member owner); + Optional findByOwnerAndEndAtIsNull(Member owner); List findAllByOwner(Member member); List findAllByOwnerAndEndAtIsNotNull(Member member); List findAllByScrumOrderByEndAtDesc(Scrum scrum); diff --git a/src/main/java/goormthon/team28/startup_valley/service/MemberService.java b/src/main/java/goormthon/team28/startup_valley/service/MemberService.java index 4732cb0..d4dde42 100644 --- a/src/main/java/goormthon/team28/startup_valley/service/MemberService.java +++ b/src/main/java/goormthon/team28/startup_valley/service/MemberService.java @@ -132,6 +132,7 @@ public MemberContributionDto retrieveContributionMember(Long userId, Long member targetMember.getTotalMinute(), targetMember.getPart(), targetMember.getPeerReviewSummary(), + targetMember.getIsPublic(), scrumContributionDtoList ); } diff --git a/src/main/java/goormthon/team28/startup_valley/service/ReviewService.java b/src/main/java/goormthon/team28/startup_valley/service/ReviewService.java index a7a137c..fd1be19 100644 --- a/src/main/java/goormthon/team28/startup_valley/service/ReviewService.java +++ b/src/main/java/goormthon/team28/startup_valley/service/ReviewService.java @@ -85,7 +85,7 @@ public Boolean postPeerReview(Long userId, Long teamsId, ReviewCreateDto reviewC if (currentMember.equals(targetMember)) throw new CommonException(ErrorCode.INVALID_CREATE_PEER_REVIEW_SELF); // ์ด๋ฏธ ๋ฆฌ๋ทฐ๋ฅผ ์ž‘์„ฑํ•œ ๊ฒฝ์šฐ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ - if (reviewRepository.existsBySender(currentMember)) + if (reviewRepository.existsBySenderAndReceiver(currentMember, targetMember)) throw new CommonException(ErrorCode.INVALID_CREATE_PEER_REVIEW_OTHER); // ์„œ๋กœ ํŒ€์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ if (!targetMember.getTeam().equals(team)) diff --git a/src/main/java/goormthon/team28/startup_valley/service/ScrumService.java b/src/main/java/goormthon/team28/startup_valley/service/ScrumService.java index 80072a4..3e60ca5 100644 --- a/src/main/java/goormthon/team28/startup_valley/service/ScrumService.java +++ b/src/main/java/goormthon/team28/startup_valley/service/ScrumService.java @@ -48,53 +48,56 @@ public void updateScrum(Long scrumId, String summary, LocalDate now){ scrumRepository.updateScrumAfterOver(scrumId, summary, EScrumStatus.FINISH, now); } - public ScrumListDto listScrum(Long userId, Long teamsId, Long target) { + public ScrumListDto listScrum(Long userId, Long membersId, Long teamsId) { User currentUser = userRepository.findById(userId) .orElseThrow(() -> new CommonException(ErrorCode.NOT_FOUND_USER)); Team targetTeam = teamRepository.findById(teamsId) .orElseThrow(() -> new CommonException(ErrorCode.NOT_FOUND_TEAM)); - if (!memberRepository.existsByUserAndTeam(currentUser, targetTeam)) - throw new CommonException(ErrorCode.MISMATCH_LOGIN_USER_AND_TEAM); +// if (!memberRepository.existsByUserAndTeam(currentUser, targetTeam)) +// throw new CommonException(ErrorCode.MISMATCH_LOGIN_USER_AND_TEAM); - List memberList = new ArrayList<>(); - Member targetMember; - if (target == null) - memberList = memberRepository.findAllByTeam(targetTeam); - else { - targetMember = memberRepository.findById(target) - .orElseThrow(() -> new CommonException(ErrorCode.NOT_FOUND_MEMBER)); - if (!targetMember.getTeam().equals(targetTeam)) - throw new CommonException(ErrorCode.MISMATCH_TEAM_AND_MEMBER); - memberList.add( - memberRepository.findById(target) - .orElseThrow(() -> new CommonException(ErrorCode.NOT_FOUND_MEMBER)) - ); - } + // Target Member์™€ Team์ด ์ผ์น˜ํ•˜๋Š”์ง€ ๊ฒ€์ฆ ๋กœ์ง + Member targetMember = memberRepository.findById(membersId) + .orElseThrow(() -> new CommonException(ErrorCode.NOT_FOUND_MEMBER)); + if (!targetMember.getTeam().equals(targetTeam)) + throw new CommonException(ErrorCode.MISMATCH_TEAM_AND_MEMBER); - List scrumDtoList = new ArrayList<>(); - for (Member tempMember : memberList) { - List scrumList = scrumRepository - .findAllByWorkerAndStatus(tempMember, EScrumStatus.FINISH); - scrumDtoList.addAll( - scrumList.stream() - .map(scrum -> ScrumDto.of( - scrum.getId(), - scrum.getSummary(), - scrum.getStartAt(), - scrum.getEndAt(), - workRepository.findAllByScrumOrderByEndAtDesc(scrum) - .stream() - .limit(3) - .map(work -> WorkForScrumDto.of( - work.getId(), - work.getContent() - )) - .toList() - )) - .toList() - ); - } + // Target Member์™€ ๋กœ๊ทธ์ธ ํ•œ ์œ ์ €๊ฐ€ ์—ฐ๊ด€์ด ์žˆ๋Š”์ง€ ๊ฒ€์ฆ ๋กœ์ง + User targetUser = targetMember.getUser(); + List targetMemberList = memberRepository.findAllByUser(targetUser); + List currentMemberList = memberRepository.findAllByUser(currentUser); + boolean isLoginUserAndTargetAreAssociated = false; + for (Member tempTargetMember : targetMemberList) + for (Member tempCurrentMember : currentMemberList) + if (tempTargetMember.getTeam().equals(tempCurrentMember.getTeam())) { + isLoginUserAndTargetAreAssociated = true; + break; + } + if (!isLoginUserAndTargetAreAssociated) + throw new CommonException(ErrorCode.NOT_ASSOCIATE_LOGIN_USER_AND_TARGET_MEMBER); + + boolean isTargetMemberPublic = targetMember.getIsPublic(); + + List scrumList = scrumRepository + .findAllByWorkerAndStatus(targetMember, EScrumStatus.FINISH); + List scrumDtoList = scrumList.stream() + .map(scrum -> ScrumDto.of( + scrum.getId(), + scrum.getSummary(), + scrum.getStartAt(), + scrum.getEndAt(), + targetMember.getTotalMinute(), + workRepository.findAllByScrumOrderByEndAtDesc(scrum) + .stream() + .limit(3) + .map(work -> WorkForScrumDto.of( + work.getId(), + work.getContent() + )) + .toList() + )) + .toList(); scrumDtoList = scrumDtoList.stream() .sorted(Comparator.comparing(ScrumDto::endAt).reversed()) .toList(); diff --git a/src/main/java/goormthon/team28/startup_valley/service/TeamService.java b/src/main/java/goormthon/team28/startup_valley/service/TeamService.java index 8f9e713..45aba77 100644 --- a/src/main/java/goormthon/team28/startup_valley/service/TeamService.java +++ b/src/main/java/goormthon/team28/startup_valley/service/TeamService.java @@ -77,6 +77,11 @@ public TeamListDto getTeamList(Long userId) { .filter(team -> !team.getStatus().equals(EProjectStatus.FINISH)) .map(team -> TeamDto.of( team.getId(), + memberRepository.findByTeamAndUser(team, currentUser) + .orElseThrow(() -> + new CommonException(ErrorCode.MISMATCH_LOGIN_USER_AND_TEAM) + ) + .getId(), team.getName(), team.getTeamImage() )) @@ -85,6 +90,11 @@ public TeamListDto getTeamList(Long userId) { .filter(team -> team.getStatus().equals(EProjectStatus.FINISH)) .map(team -> TeamDto.of( team.getId(), + memberRepository.findByTeamAndUser(team, currentUser) + .orElseThrow(() -> + new CommonException(ErrorCode.MISMATCH_LOGIN_USER_AND_TEAM) + ) + .getId(), team.getName(), team.getTeamImage() )) @@ -129,12 +139,14 @@ public TeamRetrieveListDto listRetrieveTeam(Long userId, Long membersId, String List teamRetrieveDtoList = memberStream .map(member -> TeamRetrieveDto.of( member.getTeam().getId(), + member.getId(), member.getTeam().getName(), member.getRetrospection(), member.getTeam().getTeamImage(), member.getTeam().getStartAt(), member.getTeam().getEndAt(), - member.getTeam().getStatus() + member.getTeam().getStatus(), + member.getIsPublic() )) .toList(); diff --git a/src/main/java/goormthon/team28/startup_valley/service/WorkService.java b/src/main/java/goormthon/team28/startup_valley/service/WorkService.java index fe1918e..0cc7e99 100644 --- a/src/main/java/goormthon/team28/startup_valley/service/WorkService.java +++ b/src/main/java/goormthon/team28/startup_valley/service/WorkService.java @@ -1,9 +1,11 @@ package goormthon.team28.startup_valley.service; import goormthon.team28.startup_valley.domain.*; +import goormthon.team28.startup_valley.dto.request.WorkCreateDto; import goormthon.team28.startup_valley.dto.request.WorkTimeDto; import goormthon.team28.startup_valley.dto.response.*; import goormthon.team28.startup_valley.dto.type.EPart; +import goormthon.team28.startup_valley.dto.type.EScrumStatus; import goormthon.team28.startup_valley.exception.CommonException; import goormthon.team28.startup_valley.exception.ErrorCode; import goormthon.team28.startup_valley.repository.*; @@ -28,6 +30,7 @@ public class WorkService { private final MemberRepository memberRepository; private final TeamRepository teamRepository; private final WorkRepository workRepository; + private final ScrumRepository scrumRepository; @Transactional public Work saveWork(Scrum scrum, Member member, LocalDateTime now){ @@ -75,6 +78,7 @@ public WorkListDto listMemberWork(Long userId, Long teamsId, String sort) { case "back" -> memberList = memberRepository.findAllByTeamAndPart(team, EPart.BACKEND); case "pm" -> memberList = memberRepository.findAllByTeamAndPart(team, EPart.PM); case "design" -> memberList = memberRepository.findAllByTeamAndPart(team, EPart.DESIGN); + case "fullstack" -> memberList = memberRepository.findAllByTeamAndPart(team, EPart.FULLSTACK); default -> throw new CommonException(ErrorCode.INVALID_QUERY_PARAMETER); } @@ -113,14 +117,17 @@ public TeamWorkStatusDto getTeamWorkStatus(Long userId, Long teamsId) { LocalDate startDate = DateUtil.getOneWeekAgoDate().toLocalDate(); LocalDate endDate = LocalDateTime.now().toLocalDate(); - List currentWorkerListDto = userRepository.findByNowWorking(teamsId) + List currentWorkerListDto = userRepository.findByNowWorking(teamsId) .stream() - .map(user -> UserDto.of( - user.getId(), - null, - user.getNickname(), - user.getProfileImage() - )) + .map(user -> UserWorkDto.of( + user.getId(), + user.getNickname(), + user.getProfileImage().getName(), + memberRepository.findByTeamAndUser(team, user) + .orElseThrow(() -> new CommonException(ErrorCode.NOT_FOUND_MEMBER)) + .getPart().getName() + ) + ) .toList(); Optional latestWorkContent = Optional.empty(); @@ -148,7 +155,10 @@ public RankingDto getRanking(Long userId, Long teamsId) { // ํ•ด๋‹น ํŒ€์˜ ๋ฉค๋ฒ„๊ฐ€ ์•„๋‹ ์ˆ˜๋„ ์žˆ๋Š” ๊ฒฝ์šฐ ์ฒดํฌ if (!memberRepository.existsByUserAndTeam(currentUser, team)) - throw new CommonException(ErrorCode.NOT_FOUND_MEMBER); + throw new CommonException(ErrorCode.MISMATCH_LOGIN_USER_AND_TEAM); + + LocalDate startDate = DateUtil.getOneWeekAgoDate().toLocalDate(); + LocalDate endDate = LocalDateTime.now().toLocalDate(); LocalDateTime startDate = DateUtil.getOneWeekAgoDate(); return RankingDto.of( @@ -356,4 +366,44 @@ public WorkMeasureDto measureAllWork(Long userId, Long membersId) { workDateDtoList ); } + + @Transactional + public Boolean createWork(Long userId, Long membersId, WorkCreateDto workCreateDto) { + + User currentUser = userRepository.findById(userId) + .orElseThrow(() -> new CommonException(ErrorCode.NOT_FOUND_USER)); + Member targetMember = memberRepository.findById(membersId) + .orElseThrow(() -> new CommonException(ErrorCode.NOT_FOUND_MEMBER)); + Team targetTeam = targetMember.getTeam(); + + if (!memberRepository.existsByUserAndTeam(currentUser, targetTeam)) + throw new CommonException(ErrorCode.MISMATCH_LOGIN_USER_AND_MEMBER); + + Optional optionalWork = workRepository.findByOwnerAndEndAtIsNull(targetMember); + Work work; + if (optionalWork.isPresent()) { + work = optionalWork.get(); + work.updateContent(workCreateDto.content()); + return Boolean.TRUE; + } + + Optional optionalScrum + = scrumRepository.findByWorkerAndStatus(targetMember, EScrumStatus.IN_PROGRESS); + + Scrum scrum = optionalScrum.orElseGet(() -> scrumRepository.save( + Scrum.builder() + .worker(targetMember) + .startAt(LocalDate.now()) + .build() + )); + + workRepository.save( + Work.builder() + .owner(targetMember) + .scrum(scrum) + .startAt(LocalDateTime.now()) + .build() + ); + return Boolean.TRUE; + } }