From 76722aee1edd80e829c63f1ec10fe7481cb64973 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EB=8F=99=ED=9B=88?= <2dh2@naver.com> Date: Fri, 23 Jan 2026 18:33:31 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=ED=9A=8C=EC=9B=90=EA=B0=80=EC=9E=85=20?= =?UTF-8?q?=EC=8B=9C=20=EC=96=B4=EB=93=9C=EB=AF=BC=EC=9D=98=20=ED=99=98?= =?UTF-8?q?=EC=98=81=20=EB=A9=94=EC=8B=9C=EC=A7=80=20=EC=A0=84=EC=86=A1=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/repository/UserRepository.java | 3 ++ .../domain/user/service/UserService.java | 32 +++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/src/main/java/gg/agit/konect/domain/user/repository/UserRepository.java b/src/main/java/gg/agit/konect/domain/user/repository/UserRepository.java index 72c0719c..836c70d3 100644 --- a/src/main/java/gg/agit/konect/domain/user/repository/UserRepository.java +++ b/src/main/java/gg/agit/konect/domain/user/repository/UserRepository.java @@ -10,6 +10,7 @@ import gg.agit.konect.global.code.ApiResponseCode; import gg.agit.konect.global.exception.CustomException; import gg.agit.konect.domain.user.enums.Provider; +import gg.agit.konect.domain.user.enums.UserRole; import gg.agit.konect.domain.user.model.User; public interface UserRepository extends Repository { @@ -22,6 +23,8 @@ public interface UserRepository extends Repository { Optional findById(Integer id); + Optional findFirstByRoleOrderByIdAsc(UserRole role); + default User getById(Integer id) { return findById(id).orElseThrow(() -> CustomException.of(ApiResponseCode.NOT_FOUND_USER)); diff --git a/src/main/java/gg/agit/konect/domain/user/service/UserService.java b/src/main/java/gg/agit/konect/domain/user/service/UserService.java index 0a136463..6aedb5ec 100644 --- a/src/main/java/gg/agit/konect/domain/user/service/UserService.java +++ b/src/main/java/gg/agit/konect/domain/user/service/UserService.java @@ -10,6 +10,8 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; +import gg.agit.konect.domain.chat.model.ChatMessage; +import gg.agit.konect.domain.chat.model.ChatRoom; import gg.agit.konect.domain.chat.repository.ChatMessageRepository; import gg.agit.konect.domain.chat.repository.ChatRoomRepository; import gg.agit.konect.domain.club.enums.ClubPositionGroup; @@ -27,6 +29,7 @@ import gg.agit.konect.domain.user.dto.UserInfoResponse; import gg.agit.konect.domain.user.dto.UserUpdateRequest; import gg.agit.konect.domain.user.enums.Provider; +import gg.agit.konect.domain.user.enums.UserRole; import gg.agit.konect.domain.user.model.UnRegisteredUser; import gg.agit.konect.domain.user.model.User; import gg.agit.konect.domain.user.repository.UnRegisteredUserRepository; @@ -34,12 +37,16 @@ import gg.agit.konect.global.code.ApiResponseCode; import gg.agit.konect.global.exception.CustomException; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; @Service +@Slf4j @RequiredArgsConstructor @Transactional(readOnly = true) public class UserService { + private static final String DEFAULT_WELCOME_MESSAGE = "KONECT에 오신 것을 환영합니다. 궁금한 점이 있으면 언제든 문의해 주세요."; + private final UserRepository userRepository; private final UnRegisteredUserRepository unRegisteredUserRepository; private final UniversityRepository universityRepository; @@ -89,11 +96,36 @@ public Integer signup(String email, String providerId, Provider provider, Signup joinPreMembers(savedUser, university.getId(), request.studentNumber(), request.name()); + sendWelcomeMessage(savedUser); + unRegisteredUserRepository.delete(tempUser); return savedUser.getId(); } + // TODO 추후에 슈퍼 어드민을 만들어 학교가 확장되는 것을 고려해야 함 + private void sendWelcomeMessage(User newUser) { + try { + User operator = userRepository.findFirstByRoleOrderByIdAsc(UserRole.ADMIN) + .orElse(null); + + if (operator == null) { + return; + } + + ChatRoom chatRoom = chatRoomRepository.findByTwoUsers(operator.getId(), newUser.getId()) + .orElseGet(() -> chatRoomRepository.save(ChatRoom.of(operator, newUser))); + + ChatMessage chatMessage = chatMessageRepository.save( + ChatMessage.of(chatRoom, operator, newUser, DEFAULT_WELCOME_MESSAGE) + ); + + chatRoom.updateLastMessage(chatMessage.getContent(), chatMessage.getCreatedAt()); + } catch (Exception e) { + log.warn("회원가입 환영 메시지 전송 실패. userId={}", newUser.getId(), e); + } + } + private UnRegisteredUser findUnregisteredUser(String email, String providerId, Provider provider) { if (StringUtils.hasText(providerId)) { if (unRegisteredUserRepository.existsByProviderIdAndProvider(providerId, provider)) {