From 984a22d0792b1fbb5a6dcdd1c54d8be132a0f591 Mon Sep 17 00:00:00 2001 From: Sewook Date: Thu, 19 Sep 2024 20:10:27 +0900 Subject: [PATCH 1/2] refactor: matching --- .../auth/presentation/AuthController.java | 4 ++- .../dear/domain/auth/service/AuthService.java | 5 ++- .../domain/auth/service/AuthServiceImpl.java | 26 +++++++++++--- .../chat/domain/room/mapper/RoomMapper.java | 6 ++-- .../controller/ChatController.java | 3 +- .../chat/service/chat/ChatRoomService.java | 2 +- .../service/chat/ChatRoomServiceImpl.java | 11 ++---- .../chat/service/message/MessageService.java | 3 +- .../service/message/MessageServiceImpl.java | 13 ++++++- .../query/CommunityQueryRepositoryImpl.java | 4 +++ .../dto/request/SendMessageRequest.java | 4 ++- .../presentation/FirebaseController.java | 24 ------------- .../domain/firebase/service/FCMService.java | 11 +++--- .../matching/dto/request/MatchingRequest.java | 2 ++ .../matching/service/MatchingServiceImpl.java | 3 ++ .../schedule/service/ScheduleServiceImpl.java | 1 - .../dear/domain/school/dto/SchoolCraw.java | 7 ++++ .../school/dto/response/SchoolResponse.java | 35 +++++++++++++++++++ .../user/presentation/UserController.java | 7 ++++ .../repository/query/UserQueryRepository.java | 1 + .../query/UserQueryRepositoryImpl.java | 21 +++++++++++ .../dear/domain/user/service/UserService.java | 3 ++ .../domain/user/service/UserServiceImpl.java | 9 +++++ .../dear/global/config/FirebaseConfig.java | 4 --- .../global/infra/school/enums/SchoolEnum.java | 5 +++ .../school/enums/SchoolTitleTypeEnum.java | 5 +++ 26 files changed, 164 insertions(+), 55 deletions(-) delete mode 100644 src/main/java/com/dear/domain/firebase/presentation/FirebaseController.java create mode 100644 src/main/java/com/dear/domain/school/dto/SchoolCraw.java create mode 100644 src/main/java/com/dear/domain/school/dto/response/SchoolResponse.java create mode 100644 src/main/java/com/dear/global/infra/school/enums/SchoolEnum.java create mode 100644 src/main/java/com/dear/global/infra/school/enums/SchoolTitleTypeEnum.java diff --git a/src/main/java/com/dear/domain/auth/presentation/AuthController.java b/src/main/java/com/dear/domain/auth/presentation/AuthController.java index 4004abe..8168618 100644 --- a/src/main/java/com/dear/domain/auth/presentation/AuthController.java +++ b/src/main/java/com/dear/domain/auth/presentation/AuthController.java @@ -9,6 +9,7 @@ import com.dear.global.infra.google.OcrService; import com.dear.global.response.Response; import com.dear.global.response.ResponseData; +import com.google.firebase.messaging.FirebaseMessagingException; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.constraints.Email; @@ -20,6 +21,7 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.concurrent.ExecutionException; @Tag(name = "인증", description = "인증") @RestController @@ -39,7 +41,7 @@ public Response signup(@Validated @RequestBody SignupRequest request) { @Operation(summary = "회원 인증", description = "회원 인증") @PostMapping - public ResponseData auth(@Validated @RequestBody AuthenticationRequest authRequest) { + public ResponseData auth(@Validated @RequestBody AuthenticationRequest authRequest) throws ExecutionException, InterruptedException, FirebaseMessagingException { return ResponseData.of(HttpStatus.OK,"로그인 성공",authService.auth(authRequest)); } diff --git a/src/main/java/com/dear/domain/auth/service/AuthService.java b/src/main/java/com/dear/domain/auth/service/AuthService.java index 43e17c3..e00f80a 100644 --- a/src/main/java/com/dear/domain/auth/service/AuthService.java +++ b/src/main/java/com/dear/domain/auth/service/AuthService.java @@ -4,11 +4,14 @@ import com.dear.domain.auth.dto.request.EmailVerifyRequest; import com.dear.domain.auth.dto.request.SignupRequest; import com.dear.domain.auth.dto.response.JsonWebTokenResponse; +import com.google.firebase.messaging.FirebaseMessagingException; + +import java.util.concurrent.ExecutionException; public interface AuthService { void signup(SignupRequest request); - JsonWebTokenResponse auth(AuthenticationRequest request); + JsonWebTokenResponse auth(AuthenticationRequest request) throws ExecutionException, InterruptedException, FirebaseMessagingException; JsonWebTokenResponse refresh(String token); diff --git a/src/main/java/com/dear/domain/auth/service/AuthServiceImpl.java b/src/main/java/com/dear/domain/auth/service/AuthServiceImpl.java index 79932fa..328c5ae 100644 --- a/src/main/java/com/dear/domain/auth/service/AuthServiceImpl.java +++ b/src/main/java/com/dear/domain/auth/service/AuthServiceImpl.java @@ -19,6 +19,10 @@ import com.dear.global.common.jwt.exception.TokenTypeException; import com.dear.global.common.repository.UserSecurity; import com.dear.global.security.auth.principal.CustomUserDetails; +import com.dear.global.service.RedisUtils; +import com.google.firebase.messaging.FirebaseMessaging; +import com.google.firebase.messaging.FirebaseMessagingException; +import com.google.firebase.messaging.TopicManagementResponse; import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jws; import lombok.RequiredArgsConstructor; @@ -37,7 +41,10 @@ import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.time.Duration; +import java.util.ArrayList; +import java.util.List; import java.util.Random; +import java.util.concurrent.ExecutionException; @Service @Transactional(rollbackFor = Exception.class) @@ -59,8 +66,7 @@ public void signup(SignupRequest request) { } @Override - public JsonWebTokenResponse auth(AuthenticationRequest request) { - System.out.println("---------------------"); + public JsonWebTokenResponse auth(AuthenticationRequest request) throws ExecutionException, InterruptedException, FirebaseMessagingException { UserEntity userEntity = userRepository.findByEmail(request.getEmail()) .orElseThrow(() -> UserNotFoundException.EXCEPTION); if (!new BCryptPasswordEncoder().matches(request.getPassword(), userEntity.getPassword())) { @@ -148,9 +154,21 @@ private String createAuthCode() { } } - private void saveFCMToken(String token) { + private void saveFCMToken(String token){ if (token != null) { - redisTemplate.opsForValue().set(userSecurity.getUser().getName(), token); + subscribeToTopic(userSecurity.getUser().getSchoolId().getSeq(),token); + redisTemplate.opsForValue().set(userSecurity.getUser().getEmail(), token, Duration.ofDays(7L)); } } + + public void subscribeToTopic(String topic, String registrationTokens){ + try{ + List tokens = new ArrayList<>(); + tokens.add(registrationTokens); + FirebaseMessaging.getInstance().subscribeToTopic(tokens, topic); + }catch (Exception e){ + e.printStackTrace(); + } + } + } diff --git a/src/main/java/com/dear/domain/chat/domain/room/mapper/RoomMapper.java b/src/main/java/com/dear/domain/chat/domain/room/mapper/RoomMapper.java index b635cba..1eed8b5 100644 --- a/src/main/java/com/dear/domain/chat/domain/room/mapper/RoomMapper.java +++ b/src/main/java/com/dear/domain/chat/domain/room/mapper/RoomMapper.java @@ -32,12 +32,12 @@ public ChatRoomEntity toEntity(Room room){ .build(); } - public Room toRoom(CreateRoomRequest request, Long userId){ + public Room toRoom(Long joinedUserId, String roomName, Long userId){ return Room.builder() .adminId(userId) - .chatName(request.getRoomName()) + .chatName(roomName) .createdAt(LocalDateTime.now()) - .joinedUserId(request.getJoinUserId()) + .joinedUserId(joinedUserId) .build(); } diff --git a/src/main/java/com/dear/domain/chat/presentation/controller/ChatController.java b/src/main/java/com/dear/domain/chat/presentation/controller/ChatController.java index e8f58cd..bffc60a 100644 --- a/src/main/java/com/dear/domain/chat/presentation/controller/ChatController.java +++ b/src/main/java/com/dear/domain/chat/presentation/controller/ChatController.java @@ -25,7 +25,7 @@ public class ChatController { @PostMapping("/create") public String createRoom( @RequestBody CreateRoomRequest createRoomRequest) { - return chatRoomService.createChatRoom(createRoomRequest); + return chatRoomService.createChatRoom(createRoomRequest.getJoinUserId(), createRoomRequest.getRoomName()); } @GetMapping("/search") @@ -47,4 +47,5 @@ public List getRooms(Long userId) { System.out.println("userId = " + userId); return chatRoomService.getRooms(userId); } + } diff --git a/src/main/java/com/dear/domain/chat/service/chat/ChatRoomService.java b/src/main/java/com/dear/domain/chat/service/chat/ChatRoomService.java index 5185436..ad69e44 100644 --- a/src/main/java/com/dear/domain/chat/service/chat/ChatRoomService.java +++ b/src/main/java/com/dear/domain/chat/service/chat/ChatRoomService.java @@ -8,7 +8,7 @@ public interface ChatRoomService { - String createChatRoom(CreateRoomRequest createRoomRequest); + String createChatRoom(Long joinedUserId, String roomName); RoomResponse getRoom(String roomId, Long userId); diff --git a/src/main/java/com/dear/domain/chat/service/chat/ChatRoomServiceImpl.java b/src/main/java/com/dear/domain/chat/service/chat/ChatRoomServiceImpl.java index 327b763..64be9c3 100644 --- a/src/main/java/com/dear/domain/chat/service/chat/ChatRoomServiceImpl.java +++ b/src/main/java/com/dear/domain/chat/service/chat/ChatRoomServiceImpl.java @@ -50,21 +50,16 @@ private RoomResponse toResponse(ChatRoomEntity chatRoomEntity, Long userId) { @Transactional @Override - public String createChatRoom(CreateRoomRequest createRoomRequest) { - createRoomRequest.setJoinUserId(createRoomRequest.getJoinUserId()); - - if (createRoomRequest.getRoomName().isEmpty()) { - createRoomRequest.setRoomName(createRoomRequest.getRoomName()); - } + public String createChatRoom(Long joinedUserId, String roomName) { ChatRoomEntity savedRoom = chatRoomRepository.save( chatRoomMapper.toEntity( - chatRoomMapper.toRoom(createRoomRequest, userSecurity.getUser().getId()) + chatRoomMapper.toRoom(joinedUserId,roomName, userSecurity.getUser().getId()) ) ); messageService.sendAndSaveMessage( - new ChatMessageDto(Type.ENTER, savedRoom.getId().toString(), "come on"),userSecurity.getUser().getId() + new ChatMessageDto(Type.ENTER, savedRoom.getId().toString(),joinedUserId + " 님과의 전설적인 채팅이 시작되었어요"),userSecurity.getUser().getId() ); return savedRoom.getId().toString(); diff --git a/src/main/java/com/dear/domain/chat/service/message/MessageService.java b/src/main/java/com/dear/domain/chat/service/message/MessageService.java index b8bccac..50bb5c8 100644 --- a/src/main/java/com/dear/domain/chat/service/message/MessageService.java +++ b/src/main/java/com/dear/domain/chat/service/message/MessageService.java @@ -5,11 +5,12 @@ import com.dear.domain.chat.domain.chat.dto.Message; import com.dear.domain.chat.presentation.dto.ChatMessageDto; import com.dear.domain.chat.presentation.dto.response.GetMessageResponse; +import com.google.firebase.messaging.FirebaseMessagingException; import org.springframework.data.domain.Pageable; public interface MessageService { - void sendAndSaveMessage(ChatMessageDto chatMessageDto, Long userId); + void sendAndSaveMessage(ChatMessageDto chatMessageDto, Long userId) throws FirebaseMessagingException; Message saveMessage(ChatMessageDto chatMessageDto, Long userId); MessageEntity getMessage(String roomId); GetMessageResponse getMessages(String chatRoomId, Long userId, Pageable pageable); diff --git a/src/main/java/com/dear/domain/chat/service/message/MessageServiceImpl.java b/src/main/java/com/dear/domain/chat/service/message/MessageServiceImpl.java index 0482b01..3e480c5 100644 --- a/src/main/java/com/dear/domain/chat/service/message/MessageServiceImpl.java +++ b/src/main/java/com/dear/domain/chat/service/message/MessageServiceImpl.java @@ -13,7 +13,11 @@ import com.dear.domain.chat.exception.ChatError; import com.dear.domain.chat.presentation.dto.ChatMessageDto; import com.dear.domain.chat.presentation.dto.response.GetMessageResponse; +import com.dear.domain.firebase.dto.request.SendMessageRequest; +import com.dear.domain.firebase.service.FCMService; +import com.dear.global.common.repository.UserSecurity; import com.dear.global.exception.CustomException; +import com.google.firebase.messaging.FirebaseMessagingException; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.bson.types.ObjectId; @@ -35,14 +39,21 @@ public class MessageServiceImpl implements MessageService { private final MessageMapper messageMapper; private final RoomInfoRepository roomInfoRepository; private final RabbitTemplate rabbitTemplate; + private final FCMService fcmService; + private final UserSecurity userSecurity; @Override @Transactional - public void sendAndSaveMessage(ChatMessageDto chatMessageDto, Long userId) { + public void sendAndSaveMessage(ChatMessageDto chatMessageDto, Long userId) throws FirebaseMessagingException { Message message = saveMessage(chatMessageDto,userId); rabbitTemplate.convertAndSend( "chat.exchange", "room." + chatMessageDto.getRoomId(), message ); + fcmService.sendMessage(new SendMessageRequest( + userSecurity.getUser().getEmail(), + message.getUserId().toString(), + message.getMessage() + )); } @Override diff --git a/src/main/java/com/dear/domain/community/domain/repository/query/CommunityQueryRepositoryImpl.java b/src/main/java/com/dear/domain/community/domain/repository/query/CommunityQueryRepositoryImpl.java index 2f060dc..c49d3e7 100644 --- a/src/main/java/com/dear/domain/community/domain/repository/query/CommunityQueryRepositoryImpl.java +++ b/src/main/java/com/dear/domain/community/domain/repository/query/CommunityQueryRepositoryImpl.java @@ -33,6 +33,10 @@ public List getCommunityListByUserId(Long userId, PageRequest .from(communityEntity) .leftJoin(imageEntity) .on(communityEntity.id.eq(imageEntity.id)) + .leftJoin(imageEntity1) + .on(communityEntity.id.eq(imageEntity1.id)) + .leftJoin(imageEntity2) + .on(communityEntity.id.eq(imageEntity2.id)) .where(communityEntity.user.id.eq(userId)) .fetchJoin() .offset((pageRequest.page() - 1) * pageRequest.size()) diff --git a/src/main/java/com/dear/domain/firebase/dto/request/SendMessageRequest.java b/src/main/java/com/dear/domain/firebase/dto/request/SendMessageRequest.java index 93a557a..43f4c36 100644 --- a/src/main/java/com/dear/domain/firebase/dto/request/SendMessageRequest.java +++ b/src/main/java/com/dear/domain/firebase/dto/request/SendMessageRequest.java @@ -1,12 +1,14 @@ package com.dear.domain.firebase.dto.request; +import lombok.AllArgsConstructor; import lombok.Getter; import lombok.Setter; @Getter @Setter +@AllArgsConstructor public class SendMessageRequest { - private String targetToken; + private String email; private String title; private String body; } diff --git a/src/main/java/com/dear/domain/firebase/presentation/FirebaseController.java b/src/main/java/com/dear/domain/firebase/presentation/FirebaseController.java deleted file mode 100644 index 892053a..0000000 --- a/src/main/java/com/dear/domain/firebase/presentation/FirebaseController.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.dear.domain.firebase.presentation; - -import com.dear.domain.firebase.dto.request.SendMessageRequest; -import com.dear.domain.firebase.service.FCMService; -import com.dear.global.response.Response; -import com.google.firebase.messaging.FirebaseMessagingException; -import lombok.RequiredArgsConstructor; -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.RestController; - -@RequestMapping("/firebase") -@RestController -@RequiredArgsConstructor -public class FirebaseController { - private final FCMService fcmService; - - @PostMapping - public Response saveToken(@RequestBody SendMessageRequest messageRequest) throws FirebaseMessagingException { - return fcmService.sendMessage(messageRequest); - } - -} diff --git a/src/main/java/com/dear/domain/firebase/service/FCMService.java b/src/main/java/com/dear/domain/firebase/service/FCMService.java index e7b9d70..455d32a 100644 --- a/src/main/java/com/dear/domain/firebase/service/FCMService.java +++ b/src/main/java/com/dear/domain/firebase/service/FCMService.java @@ -8,6 +8,7 @@ import com.google.firebase.messaging.Notification; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; @@ -15,14 +16,15 @@ @RequiredArgsConstructor @Slf4j public class FCMService{ + private final StringRedisTemplate redisTemplate; - public Response sendMessage(SendMessageRequest request) throws FirebaseMessagingException { - - Message message = makeMessage(request.getTargetToken(), request.getTitle(), request.getBody()); + public void sendMessage(SendMessageRequest request) throws FirebaseMessagingException { + String token = redisTemplate.opsForValue().get(request.getEmail()); + Message message = makeMessage(token,request.getTitle(), request.getBody()); try{ FirebaseMessaging.getInstance().send(message); - return Response.of(HttpStatus.OK,"메세지 발싸"); + log.info("메세지 발싸"); }catch (Exception e){ log.error("푸쉬 발송 중 에러 ::::::::::: " + e.getMessage()); throw e; @@ -35,6 +37,7 @@ public void sendTopicMessage(String topic, String title, String body) throws Fir try{ FirebaseMessaging.getInstance().send(message); + log.info("메세지 발싸"); }catch (Exception e){ log.error("푸쉬 발송 중 에러 ::::::::::: " + e.getMessage()); throw e; diff --git a/src/main/java/com/dear/domain/matching/dto/request/MatchingRequest.java b/src/main/java/com/dear/domain/matching/dto/request/MatchingRequest.java index 45c7208..a986d1a 100644 --- a/src/main/java/com/dear/domain/matching/dto/request/MatchingRequest.java +++ b/src/main/java/com/dear/domain/matching/dto/request/MatchingRequest.java @@ -9,5 +9,7 @@ public class MatchingRequest{ @NotEmpty private Long subjectId; + @NotEmpty + private String message; } diff --git a/src/main/java/com/dear/domain/matching/service/MatchingServiceImpl.java b/src/main/java/com/dear/domain/matching/service/MatchingServiceImpl.java index 6ebeb04..db7ad06 100644 --- a/src/main/java/com/dear/domain/matching/service/MatchingServiceImpl.java +++ b/src/main/java/com/dear/domain/matching/service/MatchingServiceImpl.java @@ -1,5 +1,6 @@ package com.dear.domain.matching.service; +import com.dear.domain.chat.service.chat.ChatRoomService; import com.dear.domain.matching.domain.MatchingEntity; import com.dear.domain.matching.domain.enums.MatchingType; import com.dear.domain.matching.dto.Matching; @@ -25,6 +26,7 @@ public class MatchingServiceImpl implements MatchingService { private final MatchingMapper matchingMapper; private final MatchingQueryRepository queryRepository; private final UserSecurity userSecurity; + private final ChatRoomService chatRoomService; @Override public void matching(MatchingRequest matchingRequest) { @@ -32,6 +34,7 @@ public void matching(MatchingRequest matchingRequest) { Matching matching = matchingMapper.toMatching(matchingEntity); matching.setMatchingType(MatchingType.MATCHING_SUCCESS); matchingRepository.save(matchingMapper.toEntity(matching)); + chatRoomService.createChatRoom(matchingRequest.getSubjectId(), matchingRequest.getSubjectId().toString()); } @Override diff --git a/src/main/java/com/dear/domain/schedule/service/ScheduleServiceImpl.java b/src/main/java/com/dear/domain/schedule/service/ScheduleServiceImpl.java index 64eb132..b1c1826 100644 --- a/src/main/java/com/dear/domain/schedule/service/ScheduleServiceImpl.java +++ b/src/main/java/com/dear/domain/schedule/service/ScheduleServiceImpl.java @@ -9,7 +9,6 @@ import com.dear.domain.school.domain.SchoolEntity; import com.dear.domain.school.exception.NotYetAvailableException; import com.dear.domain.user.domain.UserEntity; -import com.dear.domain.user.dto.User; import com.dear.domain.user.mapper.UserMapper; import com.dear.global.common.dto.request.PageRequest; import com.dear.global.common.repository.UserSecurity; diff --git a/src/main/java/com/dear/domain/school/dto/SchoolCraw.java b/src/main/java/com/dear/domain/school/dto/SchoolCraw.java new file mode 100644 index 0000000..0dce3b7 --- /dev/null +++ b/src/main/java/com/dear/domain/school/dto/SchoolCraw.java @@ -0,0 +1,7 @@ +package com.dear.domain.school.dto; + +public record SchoolCraw( + String intro, + String image +) { +} diff --git a/src/main/java/com/dear/domain/school/dto/response/SchoolResponse.java b/src/main/java/com/dear/domain/school/dto/response/SchoolResponse.java new file mode 100644 index 0000000..19b2c55 --- /dev/null +++ b/src/main/java/com/dear/domain/school/dto/response/SchoolResponse.java @@ -0,0 +1,35 @@ +package com.dear.domain.school.dto.response; + +import com.dear.domain.school.dto.SchoolCraw; +import com.dear.global.infra.career.dto.response.DataSearchSchoolResponse; + +public record SchoolResponse( + String schoolNm, + String schoolType, + String link, + String schoolGubun, + String adres, + String schoolName, + String region, + String totalCount, + String estType, + String seq, + String intro, + String image +) { + public static SchoolResponse create(DataSearchSchoolResponse.Content content, SchoolCraw schoolCraw) { + return new SchoolResponse( + content.getSchoolName(), + content.getSchoolType(), + content.getLink(), + content.getSchoolGubun(), + content.getAdres(), + content.getSchoolName(), + content.getRegion(), + content.getTotalCount(), + content.getEstType(), + content.getSeq(), + schoolCraw.image(), + schoolCraw.image()); + } +} diff --git a/src/main/java/com/dear/domain/user/presentation/UserController.java b/src/main/java/com/dear/domain/user/presentation/UserController.java index 678d6a1..91eae02 100644 --- a/src/main/java/com/dear/domain/user/presentation/UserController.java +++ b/src/main/java/com/dear/domain/user/presentation/UserController.java @@ -1,5 +1,6 @@ package com.dear.domain.user.presentation; +import com.dear.domain.user.domain.UserEntity; import com.dear.domain.user.dto.reponse.LoadUserResponse; import com.dear.domain.user.enums.UserStatus; import com.dear.domain.user.service.UserService; @@ -36,4 +37,10 @@ public Response quitUser(){ return Response.of(HttpStatus.OK,"회원 탈퇴 성공"); } + @Operation(summary = "get birthday", description = "생일 조회") + @GetMapping("/birthDay") + public ResponseData> getBirthday(){ + return userService.isBirthDay(); + } + } diff --git a/src/main/java/com/dear/domain/user/repository/query/UserQueryRepository.java b/src/main/java/com/dear/domain/user/repository/query/UserQueryRepository.java index 76ebdaf..fbfe684 100644 --- a/src/main/java/com/dear/domain/user/repository/query/UserQueryRepository.java +++ b/src/main/java/com/dear/domain/user/repository/query/UserQueryRepository.java @@ -9,4 +9,5 @@ public interface UserQueryRepository { Optional findByUserId(Long userId); List loadUser(UserStatus userStatus); + List getBirthDayChingoo(Long userId); } diff --git a/src/main/java/com/dear/domain/user/repository/query/UserQueryRepositoryImpl.java b/src/main/java/com/dear/domain/user/repository/query/UserQueryRepositoryImpl.java index 0b45f58..42d56de 100644 --- a/src/main/java/com/dear/domain/user/repository/query/UserQueryRepositoryImpl.java +++ b/src/main/java/com/dear/domain/user/repository/query/UserQueryRepositoryImpl.java @@ -1,12 +1,15 @@ package com.dear.domain.user.repository.query; import com.dear.domain.user.domain.UserEntity; +import com.dear.domain.user.dto.User; import com.dear.domain.user.enums.UserRole; import com.dear.domain.user.enums.UserStatus; import com.querydsl.jpa.impl.JPAQueryFactory; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; +import java.time.LocalDate; +import java.time.MonthDay; import java.util.List; import java.util.Optional; @@ -32,4 +35,22 @@ public List loadUser(UserStatus userStatus) { .where(userEntity.role.notIn(UserRole.ADMIN).and(userEntity.userStatus.eq(userStatus))) .fetch(); } + + @Override + public List getBirthDayChingoo(Long userId) { + LocalDate today = LocalDate.now(); + + String userSchool = jpaQueryFactory + .select(userEntity.schoolId.seq) + .from(userEntity) + .where(userEntity.id.eq(userId)) + .fetchOne(); + + return jpaQueryFactory.selectFrom(userEntity) + .where(userEntity.schoolId.seq.eq(userSchool) + .and(userEntity.birthDay.month().eq(today.getMonthValue())) + .and(userEntity.birthDay.dayOfMonth().eq(today.getDayOfMonth()))) + .fetch(); + } + } diff --git a/src/main/java/com/dear/domain/user/service/UserService.java b/src/main/java/com/dear/domain/user/service/UserService.java index 46234aa..1b6cf0a 100644 --- a/src/main/java/com/dear/domain/user/service/UserService.java +++ b/src/main/java/com/dear/domain/user/service/UserService.java @@ -1,8 +1,10 @@ package com.dear.domain.user.service; import com.dear.domain.school.domain.SchoolEntity; +import com.dear.domain.user.domain.UserEntity; import com.dear.domain.user.dto.reponse.LoadUserResponse; import com.dear.domain.user.enums.UserStatus; +import com.dear.global.response.ResponseData; import java.util.List; @@ -11,4 +13,5 @@ public interface UserService { void addSchool(SchoolEntity schoolEntity); void quitUser(); SchoolEntity findSchoolByUser(); + ResponseData> isBirthDay(); } diff --git a/src/main/java/com/dear/domain/user/service/UserServiceImpl.java b/src/main/java/com/dear/domain/user/service/UserServiceImpl.java index 19759b0..b381d03 100644 --- a/src/main/java/com/dear/domain/user/service/UserServiceImpl.java +++ b/src/main/java/com/dear/domain/user/service/UserServiceImpl.java @@ -11,9 +11,12 @@ import com.dear.domain.user.repository.UserRepository; import com.dear.domain.user.repository.query.UserQueryRepository; import com.dear.global.common.repository.UserSecurity; +import com.dear.global.response.ResponseData; import lombok.AllArgsConstructor; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import java.util.Optional; @@ -39,6 +42,12 @@ public SchoolEntity findSchoolByUser() { return userEntity.getSchoolId(); } + @Override + public ResponseData> isBirthDay() { + List birthDayChingoo = userQueryRepository.getBirthDayChingoo(userSecurity.getUser().getId()); + return ResponseData.of(HttpStatus.OK, "조회 성공", birthDayChingoo); + } + @Override public void addSchool(SchoolEntity schoolEntity){ UserEntity userEntity = userMapper.toEntity(userSecurity.getUser()); diff --git a/src/main/java/com/dear/global/config/FirebaseConfig.java b/src/main/java/com/dear/global/config/FirebaseConfig.java index a46e8c8..05aaf14 100644 --- a/src/main/java/com/dear/global/config/FirebaseConfig.java +++ b/src/main/java/com/dear/global/config/FirebaseConfig.java @@ -3,10 +3,6 @@ import com.google.auth.oauth2.GoogleCredentials; import com.google.firebase.FirebaseApp; import com.google.firebase.FirebaseOptions; -import com.google.firebase.messaging.FirebaseMessaging; -import com.google.firebase.messaging.FirebaseMessagingException; -import com.google.firebase.messaging.Message; -import com.google.firebase.messaging.Notification; import jakarta.annotation.PostConstruct; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; diff --git a/src/main/java/com/dear/global/infra/school/enums/SchoolEnum.java b/src/main/java/com/dear/global/infra/school/enums/SchoolEnum.java new file mode 100644 index 0000000..cc57305 --- /dev/null +++ b/src/main/java/com/dear/global/infra/school/enums/SchoolEnum.java @@ -0,0 +1,5 @@ +package com.dear.global.infra.school.enums; + +public enum SchoolEnum { + DGSW +} diff --git a/src/main/java/com/dear/global/infra/school/enums/SchoolTitleTypeEnum.java b/src/main/java/com/dear/global/infra/school/enums/SchoolTitleTypeEnum.java new file mode 100644 index 0000000..7cd0404 --- /dev/null +++ b/src/main/java/com/dear/global/infra/school/enums/SchoolTitleTypeEnum.java @@ -0,0 +1,5 @@ +package com.dear.global.infra.school.enums; + +public enum SchoolTitleTypeEnum { + SCHOOL_TITLE_TYPE, SELECT_DAY +} From 92cff2d5f8fc13edce0f1d35ea02cb302c54610f Mon Sep 17 00:00:00 2001 From: Sewook Date: Thu, 26 Sep 2024 20:13:48 +0900 Subject: [PATCH 2/2] feat: add thrown exception --- .../domain/chat/presentation/controller/ChatController.java | 3 ++- .../chat/presentation/controller/RabbitController.java | 3 ++- .../com/dear/domain/chat/service/chat/ChatRoomService.java | 5 +++-- .../dear/domain/chat/service/chat/ChatRoomServiceImpl.java | 5 +++-- .../domain/matching/presentation/MatchingController.java | 3 ++- .../com/dear/domain/matching/service/MatchingService.java | 3 ++- .../dear/domain/matching/service/MatchingServiceImpl.java | 3 ++- 7 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/dear/domain/chat/presentation/controller/ChatController.java b/src/main/java/com/dear/domain/chat/presentation/controller/ChatController.java index bffc60a..ebf9b46 100644 --- a/src/main/java/com/dear/domain/chat/presentation/controller/ChatController.java +++ b/src/main/java/com/dear/domain/chat/presentation/controller/ChatController.java @@ -4,6 +4,7 @@ import com.dear.domain.chat.presentation.dto.request.SearchRoomRequest; import com.dear.domain.chat.presentation.dto.response.RoomResponse; import com.dear.domain.chat.service.chat.ChatRoomService; +import com.google.firebase.messaging.FirebaseMessagingException; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -24,7 +25,7 @@ public class ChatController { @PostMapping("/create") public String createRoom( - @RequestBody CreateRoomRequest createRoomRequest) { + @RequestBody CreateRoomRequest createRoomRequest) throws FirebaseMessagingException { return chatRoomService.createChatRoom(createRoomRequest.getJoinUserId(), createRoomRequest.getRoomName()); } diff --git a/src/main/java/com/dear/domain/chat/presentation/controller/RabbitController.java b/src/main/java/com/dear/domain/chat/presentation/controller/RabbitController.java index cfe935a..2b4afaf 100644 --- a/src/main/java/com/dear/domain/chat/presentation/controller/RabbitController.java +++ b/src/main/java/com/dear/domain/chat/presentation/controller/RabbitController.java @@ -2,6 +2,7 @@ import com.dear.domain.chat.presentation.dto.ChatMessageDto; import com.dear.domain.chat.service.message.MessageService; +import com.google.firebase.messaging.FirebaseMessagingException; import lombok.RequiredArgsConstructor; import org.springframework.messaging.handler.annotation.MessageMapping; import org.springframework.messaging.simp.SimpAttributesContextHolder; @@ -14,7 +15,7 @@ public class RabbitController { private final MessageService messageService; @MessageMapping("chat.message") - public void send(ChatMessageDto chat) { + public void send(ChatMessageDto chat) throws FirebaseMessagingException { // messageService.sendAndSaveMessage(chat,3L); Object userIdObj = SimpAttributesContextHolder.currentAttributes().getAttribute("user-id"); if (userIdObj instanceof String) { diff --git a/src/main/java/com/dear/domain/chat/service/chat/ChatRoomService.java b/src/main/java/com/dear/domain/chat/service/chat/ChatRoomService.java index ad69e44..d27ff07 100644 --- a/src/main/java/com/dear/domain/chat/service/chat/ChatRoomService.java +++ b/src/main/java/com/dear/domain/chat/service/chat/ChatRoomService.java @@ -3,18 +3,19 @@ import com.dear.domain.chat.presentation.dto.request.CreateRoomRequest; import com.dear.domain.chat.presentation.dto.request.SearchRoomRequest; import com.dear.domain.chat.presentation.dto.response.RoomResponse; +import com.google.firebase.messaging.FirebaseMessagingException; import java.util.List; public interface ChatRoomService { - String createChatRoom(Long joinedUserId, String roomName); + String createChatRoom(Long joinedUserId, String roomName) throws FirebaseMessagingException; RoomResponse getRoom(String roomId, Long userId); List getRooms(Long userId); - void leftRoom(Long userId, String roomId); + void leftRoom(Long userId, String roomId) throws FirebaseMessagingException; List searchRoomNameIn(SearchRoomRequest searchRoomRequest, Long userId); diff --git a/src/main/java/com/dear/domain/chat/service/chat/ChatRoomServiceImpl.java b/src/main/java/com/dear/domain/chat/service/chat/ChatRoomServiceImpl.java index 64be9c3..419c4c9 100644 --- a/src/main/java/com/dear/domain/chat/service/chat/ChatRoomServiceImpl.java +++ b/src/main/java/com/dear/domain/chat/service/chat/ChatRoomServiceImpl.java @@ -14,6 +14,7 @@ import com.dear.domain.chat.service.message.MessageService; import com.dear.global.common.repository.UserSecurity; import com.dear.global.exception.CustomException; +import com.google.firebase.messaging.FirebaseMessagingException; import lombok.RequiredArgsConstructor; import org.bson.types.ObjectId; import org.springframework.stereotype.Service; @@ -50,7 +51,7 @@ private RoomResponse toResponse(ChatRoomEntity chatRoomEntity, Long userId) { @Transactional @Override - public String createChatRoom(Long joinedUserId, String roomName) { + public String createChatRoom(Long joinedUserId, String roomName) throws FirebaseMessagingException { ChatRoomEntity savedRoom = chatRoomRepository.save( chatRoomMapper.toEntity( @@ -83,7 +84,7 @@ public List getRooms(Long joinedUserId) { @Transactional @Override - public void leftRoom(Long userId, String roomId) { + public void leftRoom(Long userId, String roomId) throws FirebaseMessagingException { ChatRoomEntity chatRoomEntity = findChatRoomById(roomId); chatRoomEntity.setJoinedUserId(null); diff --git a/src/main/java/com/dear/domain/matching/presentation/MatchingController.java b/src/main/java/com/dear/domain/matching/presentation/MatchingController.java index 3b0e6e7..05996d4 100644 --- a/src/main/java/com/dear/domain/matching/presentation/MatchingController.java +++ b/src/main/java/com/dear/domain/matching/presentation/MatchingController.java @@ -6,6 +6,7 @@ import com.dear.global.common.dto.request.PageRequest; import com.dear.global.response.Response; import com.dear.global.response.ResponseData; +import com.google.firebase.messaging.FirebaseMessagingException; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; @@ -50,7 +51,7 @@ public Response rejectRequest(@Valid @RequestBody MatchingRequest request){ @PostMapping("/accept") @Operation(summary = "매칭 승인", description = "매칭 요청을 승인합니다.") - public Response acceptRequest(@Valid @RequestBody MatchingRequest request){ + public Response acceptRequest(@Valid @RequestBody MatchingRequest request) throws FirebaseMessagingException { matchingService.matching(request); return Response.of(HttpStatus.OK, "매칭 성공"); } diff --git a/src/main/java/com/dear/domain/matching/service/MatchingService.java b/src/main/java/com/dear/domain/matching/service/MatchingService.java index 1ac449d..234e491 100644 --- a/src/main/java/com/dear/domain/matching/service/MatchingService.java +++ b/src/main/java/com/dear/domain/matching/service/MatchingService.java @@ -3,12 +3,13 @@ import com.dear.domain.matching.dto.Matching; import com.dear.domain.matching.dto.request.MatchingRequest; import com.dear.global.common.dto.request.PageRequest; +import com.google.firebase.messaging.FirebaseMessagingException; import java.util.List; public interface MatchingService { - void matching(MatchingRequest matchingRequest); + void matching(MatchingRequest matchingRequest) throws FirebaseMessagingException; void finale(MatchingRequest matchingRequest); List findRequest(PageRequest pageRequest); void reject(MatchingRequest matchingRequest); diff --git a/src/main/java/com/dear/domain/matching/service/MatchingServiceImpl.java b/src/main/java/com/dear/domain/matching/service/MatchingServiceImpl.java index db7ad06..8e91309 100644 --- a/src/main/java/com/dear/domain/matching/service/MatchingServiceImpl.java +++ b/src/main/java/com/dear/domain/matching/service/MatchingServiceImpl.java @@ -11,6 +11,7 @@ import com.dear.domain.matching.repository.query.MatchingQueryRepository; import com.dear.global.common.dto.request.PageRequest; import com.dear.global.common.repository.UserSecurity; +import com.google.firebase.messaging.FirebaseMessagingException; import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -29,7 +30,7 @@ public class MatchingServiceImpl implements MatchingService { private final ChatRoomService chatRoomService; @Override - public void matching(MatchingRequest matchingRequest) { + public void matching(MatchingRequest matchingRequest) throws FirebaseMessagingException { MatchingEntity matchingEntity = matchingRepository.findByUserIdAndProfessorId(userSecurity.getUser().getId(), matchingRequest.getSubjectId()).orElseThrow(()->MatchingNotFoundException.EXCEPTION); Matching matching = matchingMapper.toMatching(matchingEntity); matching.setMatchingType(MatchingType.MATCHING_SUCCESS);