Skip to content

Commit

Permalink
Merge pull request #140
Browse files Browse the repository at this point in the history
release
  • Loading branch information
devbattery authored Feb 11, 2025
2 parents 5b2796d + ebaa418 commit df8f98f
Show file tree
Hide file tree
Showing 184 changed files with 3,955 additions and 2,632 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/be-cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ jobs:
run: |
chmod +x gradlew
echo "::group::Gradle Build Logs"
./gradlew build --exclude-task test --exclude-task asciidoctor
./gradlew clean build
echo "::endgroup::"
working-directory: ${{ env.ROOT_PATH }}
Expand Down
2 changes: 2 additions & 0 deletions be/src/docs/asciidoc/index.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -142,9 +142,11 @@ operation::movie_comment_unlike_decrement_success[snippets='http-request,http-re
operation::createGroupChat_success[snippets='http-request,http-response']

==== 그룹 채팅 가입

operation::joinGroupChat_success[snippets='http-request,http-response']

==== 그룹 채팅 가입 여부

operation::unJoinMemberCheckGroupChatJoin_success[snippets='http-request,http-response']

operation::joinMemberCheckGroupChatJoin_success[snippets='http-request,http-response']
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import lombok.RequiredArgsConstructor;
import movlit.be.member.application.service.MemberReadService;
import movlit.be.member.domain.Member;
import movlit.be.member.domain.entity.MemberEntity;
import org.springframework.core.MethodParameter;
import org.springframework.security.core.Authentication;
Expand All @@ -18,6 +17,7 @@
public class CustomArgumentResolver implements HandlerMethodArgumentResolver {

private final MemberReadService memberReadService;

@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.getParameterType() == MemberEntity.class;
Expand All @@ -28,7 +28,7 @@ public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer m
NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();

if (authentication != null && authentication.getPrincipal() instanceof MyMemberDetails){
if (authentication != null && authentication.getPrincipal() instanceof MyMemberDetails) {
MyMemberDetails memberDetails = (MyMemberDetails) authentication.getPrincipal();

return memberDetails.getMember();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
package movlit.be.auth.application.service;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Map;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import movlit.be.common.util.ids.MemberId;
import movlit.be.member.domain.Member;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,7 @@
import movlit.be.member.application.service.MemberWriteService;
import movlit.be.member.domain.Member;
import movlit.be.member.presentation.dto.request.MemberRegisterOAuth2Request;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken;
import org.springframework.security.oauth2.client.userinfo.DefaultOAuth2UserService;
import org.springframework.security.oauth2.client.userinfo.OAuth2UserRequest;
import org.springframework.security.oauth2.core.user.OAuth2User;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
package movlit.be.auth.application.service;// OAuth2AuthenticationSuccessHandler.java

import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.UUID;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import movlit.be.auth.domain.repository.AuthCodeStorage;
import movlit.be.common.util.IdFactory;
import movlit.be.common.util.IdGenerator;
import movlit.be.common.util.JwtTokenUtil;
import org.springframework.beans.factory.annotation.Value;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
import movlit.be.common.filter.dto.AuthenticationResponse;
import movlit.be.common.util.JwtTokenUtil;
import movlit.be.member.application.service.MemberReadService;
import movlit.be.member.domain.Member;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.authentication.AuthenticationManager;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public class BookCommentLikeWriteService {
// 해당 도서 리뷰에 대한 좋아요 추가
@Transactional
public BookCommentLikeVo addLike(MemberId memberId, BookCommentId bookCommentId) {
Member member = memberReadService.findByMemberId(memberId);
Member member = memberReadService.fetchByMemberId(memberId);

BookCommentVo comment = bookCommentReadService.fetchByBookCommentId(bookCommentId);
BookVo bookVo = bookDetailReadService.fetchByBookId(comment.getBookVo().getBookId());
Expand Down Expand Up @@ -75,7 +75,7 @@ public BookCommentLikeVo addLike(MemberId memberId, BookCommentId bookCommentId)
public void removeLike(MemberId memberId, BookCommentId bookCommentId) throws Exception {
BookCommentVo comment = bookCommentReadService.fetchByBookCommentId(bookCommentId);
BookVo bookVo = bookDetailReadService.fetchByBookId(comment.getBookVo().getBookId());
Member member = memberReadService.findByMemberId(memberId);
Member member = memberReadService.fetchByMemberId(memberId);

BookCommentLikeVo existingLike = bookCommentLikeRepository.fetchByBookCommentAndMember(comment, member);
if (existingLike != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public BookCommentVo registerBookComment(MemberId memberId, BookId bookId, BookC
throws BookCommentAccessDenied {
// 한 사용자는 하나의 도서에 관해 1개의 리뷰만 등록 가능
BookCommentResponseDto savedComment = bookCommentRepository.fetchCommentByMemberAndBook(memberId, bookId);
Member member = memberReadService.findByMemberId(memberId);
Member member = memberReadService.fetchByMemberId(memberId);
BookVo bookVo = bookDetailReadService.fetchByBookId(bookId);

// 첫 리뷰라면 -> 리뷰 저장
Expand Down Expand Up @@ -86,7 +86,7 @@ public BookCommentVo updateBookComment(MemberId memberId, BookId bookId, BookCom
public void deleteBookComment(MemberId memberId, BookId bookId, BookCommentId bookCommentId)
throws BookCommentAccessDenied {
BookCommentVo bookCommentVo = bookCommentReadService.fetchByBookCommentId(bookCommentId);
Member member = memberReadService.findByMemberId(memberId);
Member member = memberReadService.fetchByMemberId(memberId);
BookVo bookVo = bookDetailReadService.fetchByBookId(bookId);

if (bookCommentVo != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import lombok.RequiredArgsConstructor;
import movlit.be.book.domain.repository.BookHeartRepository;
import movlit.be.book.infra.persistence.recommend_jpa.BookHeartRecommendRepository;
import movlit.be.common.exception.BookHeartNotFoundException;
import movlit.be.common.util.ids.BookId;
import movlit.be.common.util.ids.MemberId;
import org.springframework.stereotype.Service;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ public BookDetailResponseDto fetchBookDetail(@PathVariable BookId bookId,
MemberId memberId = null;
if (details != null) {
memberId = details.getMemberId();
member = memberReadService.findByMemberId(memberId);
member = memberReadService.fetchByMemberId(memberId);
}

BookDetailResponseDto detailResponse = bookDetailReadService.fetchBookDetail(bookId, memberId);
Expand All @@ -59,7 +59,7 @@ public BookDetailResponseDto fetchBookDetail(@PathVariable BookId bookId,
public ResponseEntity addHearts(@PathVariable BookId bookId, @AuthenticationPrincipal MyMemberDetails details) {
if (details != null) {
MemberId memberId = details.getMemberId();
Member member = memberReadService.findByMemberId(memberId);
Member member = memberReadService.fetchByMemberId(memberId);
BookVo bookVo = bookDetailReadService.fetchByBookId(bookId);

BookHeartVo savedHeart = bookHeartWriteService.addHeart(member, bookVo);
Expand All @@ -79,7 +79,7 @@ public ResponseEntity removeHearts(@PathVariable BookId bookId, @AuthenticationP
) throws Exception {
if (details != null) {
MemberId memberId = details.getMemberId();
Member member = memberReadService.findByMemberId(memberId);
Member member = memberReadService.fetchByMemberId(memberId);
BookVo bookVo = bookDetailReadService.fetchByBookId(bookId);

bookHeartWriteService.removeHeart(member, bookVo);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package movlit.be.chat_room.application.convertor;

import java.time.LocalDateTime;
import java.util.Objects;
import movlit.be.chat_room.application.service.dto.RequestDataForCreationWorker;
import movlit.be.chat_room.domain.GroupChatroom;
import movlit.be.chat_room.domain.MemberRChatroom;
import movlit.be.chat_room.presentation.dto.OneononeChatroomCreatePubDto;
import movlit.be.chat_room.presentation.dto.OneononeChatroomCreatePubRequest;
import movlit.be.common.exception.ContentTypeNotExistException;
import movlit.be.common.util.IdFactory;
import movlit.be.common.util.ids.MemberId;
import movlit.be.member.domain.entity.MemberEntity;

public class ChatroomConvertor {

private ChatroomConvertor() {
}

public static MemberRChatroom makeNonReMemberRChatroom() {
return new MemberRChatroom(IdFactory.createMemberRChatroom(), LocalDateTime.now());
}

public static GroupChatroom makeNonReGroupChatroom(RequestDataForCreationWorker data) {
return new GroupChatroom(IdFactory.createGroupChatroomId(),
data.getRoomName(),
data.getWorkerContentId(),
LocalDateTime.now());
}

public static String generateContentId(String contentType, Long contentId) {
if (Objects.equals(contentType, "movie")) {
return "MV_" + contentId;
}

if (Objects.equals(contentType, "book")) {
return "BK_" + contentId;
}

throw new ContentTypeNotExistException();
}

public static OneononeChatroomCreatePubDto makeOneononeChatroomCreatePubDto(MemberId topicSenderId,
OneononeChatroomCreatePubRequest request,
MemberEntity topicSender) {
return new OneononeChatroomCreatePubDto(
request.getRoomId(),
request.getTopicReceiverId(),
topicSenderId,
topicSender.getNickname(),
topicSender.getProfileImgUrl(),
request.getChatMessage()
);
}

}
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
package movlit.be.pub_sub.chatRoom.application.service;
package movlit.be.chat_room.application.service;

import java.util.List;
import java.util.Objects;
import lombok.RequiredArgsConstructor;
import movlit.be.pub_sub.chat_message.application.service.ChatMessageService;
import movlit.be.pub_sub.chat_message.presentation.dto.response.ChatMessageDto;
import movlit.be.chat_room.presentation.dto.GroupChatroomResponseDto;
import movlit.be.common.util.ids.MemberId;
import movlit.be.pub_sub.chatMessage.application.service.ChatMessageService;
import movlit.be.pub_sub.chatMessage.presentation.dto.response.ChatMessageDto;
import movlit.be.pub_sub.chatRoom.presentation.dto.GroupChatroomResponseDto;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
public class FetchGroupChatroomUseCase {

private final GroupChatroomService groupChatroomService;
private final ChatMessageService chatMessageService;
private final GroupChatroomService groupChatroomService;

// 내가 가입한 그룹채팅 리스트 가져오기
public List<GroupChatroomResponseDto> execute(MemberId memberId) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,18 @@
package movlit.be.pub_sub.chatRoom.application.service;
package movlit.be.chat_room.application.service;

import java.util.List;
import java.util.Objects;

import lombok.RequiredArgsConstructor;
import movlit.be.pub_sub.chat_message.application.service.ChatMessageService;
import movlit.be.pub_sub.chat_message.presentation.dto.response.ChatMessageDto;
import movlit.be.chat_room.presentation.dto.OneononeChatroomResponse;
import movlit.be.common.util.ids.MemberId;
import movlit.be.pub_sub.chatMessage.application.service.ChatMessageService;
import movlit.be.pub_sub.chatMessage.presentation.dto.response.ChatMessageDto;
import movlit.be.pub_sub.chatRoom.presentation.dto.GroupChatroomResponseDto;
import movlit.be.pub_sub.chatRoom.presentation.dto.OneononeChatroomResponse;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
public class FetchMyOneononeChatroomUseCase {
public class FetchOneononeChatroomUseCase {

private final OneononeChatroomService oneononeChatroomService;
private final ChatMessageService chatMessageService;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package movlit.be.pub_sub.chatRoom.application.service;
package movlit.be.chat_room.application.service;

import java.util.HashMap;
import java.util.Map;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package movlit.be.chat_room.application.service;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.util.List;
import java.util.concurrent.TimeUnit;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import movlit.be.pub_sub.chat_message.presentation.dto.response.MessageType;
import movlit.be.chat_room.application.service.dto.GroupChatroomJoinedEvent;
import movlit.be.chat_room.presentation.dto.GroupChatroomMemberResponse;
import movlit.be.chat_room.presentation.dto.UpdateRoomDto;
import movlit.be.chat_room.presentation.dto.UpdateRoomDto.EventType;
import movlit.be.common.config.RedisMessagePublisher;
import movlit.be.common.util.ids.GroupChatroomId;
import movlit.be.common.util.ids.MemberId;
import movlit.be.member.application.service.MemberReadService;
import movlit.be.member.domain.entity.MemberEntity;
import org.springframework.stereotype.Component;
import org.springframework.transaction.event.TransactionalEventListener;

@Component
@RequiredArgsConstructor
@Slf4j
public class GroupChatroomJoinedEventListener {

private final GroupChatroomUseCase groupChatroomUseCase;
private final RedisMessagePublisher redisMessagePublisher;
private final MemberReadService memberReadService;

@TransactionalEventListener
public void handleGroupChatroomJoinEvent(GroupChatroomJoinedEvent event) throws JsonProcessingException {
GroupChatroomId groupChatroomId = event.getGroupChatroomId();
MemberId newMemberId = event.getMemberId();

// 1. 'ㅇㅇ(닉네임) 님이 가입하셨습니다.' 메세지 생성
MemberEntity newMember = memberReadService.findEntityById(newMemberId);
String joinMessage = newMember.getNickname() + " 님이 가입하셨습니다.";

// 2. 캐시된 멤버 목록 가져오기 (캐시 없으면 자동 생성)
List<GroupChatroomMemberResponse> cachedMembers = groupChatroomUseCase.fetchMembersInGroupChatroom(
groupChatroomId, true);

// 3. 새 멤버 정보 생성 및 캐시된 목록에 추가
GroupChatroomMemberResponse newMemberResponse = new GroupChatroomMemberResponse(
newMemberId,
newMember.getNickname(),
newMember.getProfileImgUrl()
);
cachedMembers.add(newMemberResponse);
log.info("GroupChatroomJoinedEventListener :: 캐시에 새로운 멤버 추가 :: {}", newMemberResponse);

// 4. 업데이트된 목록, redis에 저장
groupChatroomUseCase.updateCachedMembers(groupChatroomId, cachedMembers);

// 5. UpdateRoomDto 생성
UpdateRoomDto updateRoomDto = new UpdateRoomDto(
groupChatroomId.getValue(),
MessageType.GROUP,
EventType.MEMBER_JOIN,
newMemberId,
joinMessage // 입장메세지 설정
);

// 6. /topic/chat/room/{roomId} 토픽으로 업데이트된 멤버 목록 발행 -> RedisMessageSubscriber에서 처리
redisMessagePublisher.updateRoom(updateRoomDto);
}

}
Loading

0 comments on commit df8f98f

Please sign in to comment.