From 27e8a2f0892a6e4f05eca4db7cb63f9693d6bd8c Mon Sep 17 00:00:00 2001 From: JeongHeumChoi <79458446+JeongHeumChoi@users.noreply.github.com> Date: Wed, 24 Jul 2024 19:19:47 +0900 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=80=20[Deploy]=20-=20DiscordListener?= =?UTF-8?q?=20=EC=98=A4=EB=A5=98=20=ED=95=B4=EA=B2=B0=20=EB=B0=98=EC=98=81?= =?UTF-8?q?=20(#215)?= 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: ์ฝ”๋“œ ์Šคํƒ€์ผ ์ˆ˜์ • --- .../discord/listener/DiscordListener.java | 82 ++++++++++++------- .../team28/startup_valley/domain/User.java | 14 +++- .../repository/UserRepository.java | 4 +- .../security/info/DiscordOauth2UserInfo.java | 5 ++ .../security/info/factory/Oauth2UserInfo.java | 1 + .../CustomOauth2UserDetailService.java | 5 +- .../startup_valley/service/UserService.java | 11 ++- 7 files changed, 82 insertions(+), 40 deletions(-) diff --git a/src/main/java/goormthon/team28/startup_valley/discord/listener/DiscordListener.java b/src/main/java/goormthon/team28/startup_valley/discord/listener/DiscordListener.java index 553f85a..3d87340 100644 --- a/src/main/java/goormthon/team28/startup_valley/discord/listener/DiscordListener.java +++ b/src/main/java/goormthon/team28/startup_valley/discord/listener/DiscordListener.java @@ -24,6 +24,7 @@ @Slf4j @RequiredArgsConstructor public class DiscordListener extends ListenerAdapter { + private final UserService userService; private final TeamService teamService; private final MemberService memberService; @@ -33,10 +34,13 @@ public class DiscordListener extends ListenerAdapter { private final WorkService workService; private final GptService gptService; private final ReviewService reviewService; + @Override public void onSlashCommandInteraction(SlashCommandInteractionEvent event) { + LocalDate nowLocalDate = LocalDate.now(); LocalDateTime nowLocalDateTime = LocalDateTime.now(); + switch (event.getName()) { case "1-ํŒ€์›์—…๋ฐ์ดํŠธ": // ๋ด‡์„ ์ œ์™ธํ•œ ์‚ฌ์šฉ์ž ๋ชฉ๋ก ์ƒ์„ฑ @@ -55,9 +59,8 @@ public void onSlashCommandInteraction(SlashCommandInteractionEvent event) { log.info("๋ฉค๋ฒ„ ์ƒ์„ฑ ์™„๋ฃŒ"); event.reply("ํŒ€ ๊ณผ ํŒ€ ๋ฉค๋ฒ„๋ฅผ ์—ฐ๊ฒฐํ–ˆ์–ด์š”! 'ํŒŒํŠธ์ž…๋ ฅํ•˜๊ธฐ' ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์—ญํ• ์„ ์•Œ๋ ค์ฃผ์„ธ์š” !!").setEphemeral(true).queue(); - } else { + } else event.reply("์›น์— ํšŒ์›๊ฐ€์ž…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค!\n\n" + "ํšŒ์›๊ฐ€์ž… ํ•ด์ฃผ์„ธ์š” !! : " + noSignUp.toString()).setEphemeral(true).queue(); - } break; case "2-ํŒŒํŠธ์ž…๋ ฅํ•˜๊ธฐ": @@ -397,65 +400,84 @@ public void onSlashCommandInteraction(SlashCommandInteractionEvent event) { break; } } + public List findNoSignUp(List members) { + List usersWithoutInfo = new ArrayList<>(); for (Member member : members) { - String serialId = member.getUser().getName(); - if (!userService.isExisted(serialId)) { - usersWithoutInfo.add(serialId); - } + String discordId = member.getUser().getName(); + if (!userService.isExisted(discordId)) + usersWithoutInfo.add(discordId); } return usersWithoutInfo; } + private Team myTeam(SlashCommandInteractionEvent event){ Optional optionalTeam = teamService.findByGuildId(event.getGuild().getId()); - if (optionalTeam.isEmpty()){ + if (optionalTeam.isEmpty()) event.reply("ํŒ€์›์—…๋ฐ์ดํŠธ๋ฅผ ํ†ตํ•ด ํŒ€์„ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š” !").setEphemeral(true).queue(); - } return optionalTeam.get(); } - private goormthon.team28.startup_valley.domain.User getUser(SlashCommandInteractionEvent event, String userId){ - Optional optionalUser = userService.findBySerialId(userId); - if (optionalUser.isEmpty()){ + + private goormthon.team28.startup_valley.domain.User getUser( + SlashCommandInteractionEvent event, + String userId + ){ + Optional optionalUser = userService.findByDiscordId(userId); + if (optionalUser.isEmpty()) event.reply("์›น์— ํšŒ์›๊ฐ€์ž…์„ ๋จผ์ € ์ง„ํ–‰ํ•ด์ฃผ์„ธ์š” !").setEphemeral(true).queue(); - } return optionalUser.get(); } - private goormthon.team28.startup_valley.domain.Member getMember(SlashCommandInteractionEvent event, String userId){ - Optional optionalMember = memberService.findByTeamAndUser( - myTeam(event), - getUser(event, userId) - ); - if (optionalMember.isEmpty()){ - event.reply("ํŒ€์›์„ ์กฐํšŒํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค ใ… ใ… . ํŒ€์› ์—…๋ฐ์ดํŠธ๋ฅผ ํ†ตํ•ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•ด์ฃผ์„ธ์š” ~ !").setEphemeral(true).queue(); - } + + private goormthon.team28.startup_valley.domain.Member getMember( + SlashCommandInteractionEvent event, + String userId + ){ + Optional optionalMember + = memberService.findByTeamAndUser(myTeam(event), getUser(event, userId)); + if (optionalMember.isEmpty()) + event.reply("ํŒ€์›์„ ์กฐํšŒํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค ใ… ใ… . ํŒ€์› ์—…๋ฐ์ดํŠธ๋ฅผ ํ†ตํ•ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•ด์ฃผ์„ธ์š” ~ !") + .setEphemeral(true) + .queue(); return optionalMember.get(); } - private Optional getProcessingScrum(SlashCommandInteractionEvent event, String userId){ + + private Optional getProcessingScrum( + SlashCommandInteractionEvent event, + String userId + ){ Optional nowScrum = scrumService.findNowScrum(getMember(event, userId)); if (nowScrum.isEmpty()){ - event.reply("์‹œ์ž‘๋œ ์ž‘์—…์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค ใ… ใ… , ์ž‘์—…์„ ๋จผ์ € ์‹œ์ž‘ํ•ด์ฃผ์„ธ์š”").setEphemeral(true).queue(); + event.reply("์‹œ์ž‘๋œ ์ž‘์—…์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค ใ… ใ… , ์ž‘์—…์„ ๋จผ์ € ์‹œ์ž‘ํ•ด์ฃผ์„ธ์š”") + .setEphemeral(true) + .queue(); } return nowScrum; } + private Optional getMyProcessingWork(SlashCommandInteractionEvent event){ String userId = event.getUser().getName(); return workService.findNotOverWork(getProcessingScrum(event, userId).get(), getMember(event, userId)); } - public void saveOrGetMember(Team team, Member discordMember, SlashCommandInteractionEvent event) { - goormthon.team28.startup_valley.domain.Member teamMember = memberService.saveOrGetMember( - team, - getUser(event, discordMember.getUser().getName()) - ); - if (isTeamLeaderNotSet(team) && isGuildOwner(discordMember, event)) { + public void saveOrGetMember( + Team team, + Member discordMember, + SlashCommandInteractionEvent event + ) { + goormthon.team28.startup_valley.domain.Member teamMember + = memberService.saveOrGetMember(team, getUser(event, discordMember.getUser().getName())); + + if (isTeamLeaderNotSet(team) && isGuildOwner(discordMember, event)) teamService.updateLeader(team.getId(), teamMember); - } } + public boolean isTeamLeaderNotSet(Team team) { return team.getLeader() == null; } + public boolean isGuildOwner(Member discordMember, SlashCommandInteractionEvent event) { - return discordMember.getUser().getName().equals(event.getGuild().getOwner().getUser().getName()); + return discordMember.getUser().getName() + .equals(event.getGuild().getOwner().getUser().getName()); } } diff --git a/src/main/java/goormthon/team28/startup_valley/domain/User.java b/src/main/java/goormthon/team28/startup_valley/domain/User.java index e9f796f..6954e96 100644 --- a/src/main/java/goormthon/team28/startup_valley/domain/User.java +++ b/src/main/java/goormthon/team28/startup_valley/domain/User.java @@ -9,7 +9,6 @@ import lombok.Getter; import lombok.NoArgsConstructor; import org.hibernate.annotations.DynamicUpdate; -import org.springframework.transaction.annotation.Transactional; @Entity @Getter @@ -17,6 +16,7 @@ @Table(name = "users") @NoArgsConstructor(access = AccessLevel.PROTECTED) public class User { + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") @@ -25,13 +25,17 @@ public class User { /* ์‚ฌ์šฉ์ž ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ์ •๋ณด */ @Column(name = "serial_id", nullable = false, unique = true) private String serialId; // discord serial id + @Column(name = "password", nullable = false) private String password; - @Column(name = "discord_id") - private Long discordId; + + @Column(name = "discord_id", nullable = false, unique = true) + private String discordId; + @Column(name = "role", nullable = false) @Enumerated(EnumType.STRING) private ERole role; + @Column(name = "provider", nullable = false) @Enumerated(EnumType.STRING) private EProvider provider; @@ -39,9 +43,11 @@ public class User { /* ์‚ฌ์šฉ์ž ์ด์šฉ ์ •๋ณด */ @Column(name = "nickname") private String nickname; + @Column(name = "profile_image") @Enumerated(EnumType.STRING) private EProfileImage profileImage; + @Column(name = "refresh_Token") private String refreshToken; @@ -49,12 +55,14 @@ public class User { public User( String serialId, String password, + String discordId, ERole role, EProfileImage profileImage, EProvider provider ) { this.serialId = serialId; this.password = password; + this.discordId = discordId; this.role = role; this.profileImage = profileImage; this.provider = provider; diff --git a/src/main/java/goormthon/team28/startup_valley/repository/UserRepository.java b/src/main/java/goormthon/team28/startup_valley/repository/UserRepository.java index c80f0ba..c6686e8 100644 --- a/src/main/java/goormthon/team28/startup_valley/repository/UserRepository.java +++ b/src/main/java/goormthon/team28/startup_valley/repository/UserRepository.java @@ -19,8 +19,8 @@ public interface UserRepository extends JpaRepository { @Query("update User u set u.refreshToken = :refreshToken where u.id = :userId") void updateRefreshToken(Long userId, String refreshToken); Optional findById(Long userId); - Optional findBySerialId(String serialId); - boolean existsBySerialId(String serialId); + Optional findByDiscordId(String discordId); + boolean existsByDiscordId(String discordId); boolean existsByIdAndNicknameIsNull(Long id); interface UserSecurityForm { diff --git a/src/main/java/goormthon/team28/startup_valley/security/info/DiscordOauth2UserInfo.java b/src/main/java/goormthon/team28/startup_valley/security/info/DiscordOauth2UserInfo.java index 5f83a13..62562a8 100644 --- a/src/main/java/goormthon/team28/startup_valley/security/info/DiscordOauth2UserInfo.java +++ b/src/main/java/goormthon/team28/startup_valley/security/info/DiscordOauth2UserInfo.java @@ -13,4 +13,9 @@ public DiscordOauth2UserInfo(Map attributes) { public String getId() { return this.attributes.get("id").toString(); } + + @Override + public String getDiscordId() { + return this.attributes.get("username").toString(); + } } diff --git a/src/main/java/goormthon/team28/startup_valley/security/info/factory/Oauth2UserInfo.java b/src/main/java/goormthon/team28/startup_valley/security/info/factory/Oauth2UserInfo.java index be10233..348abaf 100644 --- a/src/main/java/goormthon/team28/startup_valley/security/info/factory/Oauth2UserInfo.java +++ b/src/main/java/goormthon/team28/startup_valley/security/info/factory/Oauth2UserInfo.java @@ -10,4 +10,5 @@ public abstract class Oauth2UserInfo { protected final Map attributes; public abstract String getId(); + public abstract String getDiscordId(); } diff --git a/src/main/java/goormthon/team28/startup_valley/security/service/CustomOauth2UserDetailService.java b/src/main/java/goormthon/team28/startup_valley/security/service/CustomOauth2UserDetailService.java index 285be34..735632f 100644 --- a/src/main/java/goormthon/team28/startup_valley/security/service/CustomOauth2UserDetailService.java +++ b/src/main/java/goormthon/team28/startup_valley/security/service/CustomOauth2UserDetailService.java @@ -1,6 +1,7 @@ package goormthon.team28.startup_valley.security.service; import goormthon.team28.startup_valley.domain.User; +import goormthon.team28.startup_valley.dto.type.EProfileImage; import goormthon.team28.startup_valley.dto.type.EProvider; import goormthon.team28.startup_valley.dto.type.ERole; import goormthon.team28.startup_valley.repository.UserRepository; @@ -53,8 +54,10 @@ public OAuth2User loadUser( bCryptPasswordEncoder .encode(UUID.randomUUID().toString()) ) - .provider(provider) + .discordId(oauth2UserInfo.getDiscordId()) .role(ERole.USER) + .profileImage(EProfileImage.TOMATO) + .provider(provider) .build() ); return UserRepository.UserSecurityForm.invoke(newUser); diff --git a/src/main/java/goormthon/team28/startup_valley/service/UserService.java b/src/main/java/goormthon/team28/startup_valley/service/UserService.java index a0e0e66..8bb7c57 100644 --- a/src/main/java/goormthon/team28/startup_valley/service/UserService.java +++ b/src/main/java/goormthon/team28/startup_valley/service/UserService.java @@ -21,13 +21,16 @@ @Service @RequiredArgsConstructor public class UserService { + private final UserRepository userRepository; private final MemberRepository memberRepository; - public Optional findBySerialId(String serialId){ - return userRepository.findBySerialId(serialId); + + public Optional findByDiscordId(String discordId){ + return userRepository.findByDiscordId(discordId); } - public boolean isExisted(String serialId){ - return userRepository.existsBySerialId(serialId); + + public boolean isExisted(String discordId){ + return userRepository.existsByDiscordId(discordId); } public UserDto getUserInfo(Long userId) {